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 einorder
ie @ -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.)