Wie werden mehrere Spalten in pandas DataFrame für ein "Intervall" abgeglichen?

Ich habe die folgenden Pandas DataFrame:

import pandas as pd
df = pd.DataFrame('filename.csv')
print(df)

order    start    end    value    
1        1342    1357    category1
1        1459    1489    category7
1        1572    1601    category23
1        1587    1599    category2
1        1591    1639    category1
....
15        792     813    category13
15        892     913    category5
....

So gibt es einorderie @ -Spalte umfasst jeweils viele Zeilen und anschließend einen Bereich / ein Intervall vonstart zuend Für jede Reihe. Jede Zeile ist dann mit einem bestimmten @ gekennzeichnevalue (z. B. Kategorie 1, Kategorie 2 usw.)

etzt habe ich einen anderen Datenrahmen mit dem Namenkey_df. Es ist im Grunde genau das gleiche Format:

import pandas as pd
key_df = pd.DataFrame(...)
print(key_df)

order    start    end    value    
1        1284    1299    category4
1        1297    1309    category9
1        1312    1369    category3
1        1345    1392    category29
1        1371    1383    category31
....
1        1471    1501    category31
...

Mein Ziel ist es, das @ zu nehmkey_df dataframe und prüfen Sie, ob die Intervallestart:end Übereinstimmung mit einer der Zeilen im ursprünglichen Datenrahmendf. Wenn dies der Fall ist, wird diese Zeile indf sollte mit dem @ gekennzeichnet sekey_df dataframe'svalue Wert

In unserem obigen Beispiel ist der Datenrahmendf würde so enden:

order    start    end    value        key_value
1        1342    1357    category1    category29
1        1459    1489    category7    category31
....

Das ist, weil, wenn Sie sichkey_df, die Reih

1        1345    1392    category29

mit Intervall1::1345-1392 fällt in das Intervall1::1342-1357 im Originaldf. Ebenso daskey_df Reihe

1        1471    1501    category31

entspricht der zweiten Zeile indf:

1        1459    1489    category7    category31

Ich bin mir nicht ganz siche

(1) wie man diese Aufgabe in pandas @ erledi

(2) wie man dies effizient in Pandas skaliert

One könnte mit einer if-Anweisung beginnen, z. B.

if df.order == key_df.order:
    # now check intervals...somehow

, aber dies nutzt die Datenrahmenstruktur nicht aus. Man muss dann nach Intervallen prüfen, d. H. So etwas wie(df.start =< key_df.start) && (df.end => key_df.end)

Ich stecke fest. Was ist die effizienteste Methode, um mehrere Spalten in einem "Intervall" in Pandas abzugleichen? (Das Erstellen einer neuen Spalte, wenn diese Bedingung erfüllt ist, ist dann unkompliziert.)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage