Wie mehrere Spalten in pandas DataFrame für eine "Intervall"?
Habe ich Folgendes 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, es ist ein order
Spalte umfasst viele Zeilen, die jeweils, und dann einen Bereich/- Intervall von start
zu end
für jede Zeile. Jede Zeile ist dann gekennzeichnet durch eine bestimmte value
(z.B. category1, category2, etc.)
Nun habe ich ein anderes dataframe genannt key_df
. Es ist im Grunde das exakt 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, die key_df
dataframe und überprüfen Sie, ob die Intervalle start:end
entsprechen den Zeilen in der ursprünglichen dataframe df
. Wenn es funktioniert, diese Zeile in df
sollte beschriftet sein mit der key_df
dataframe ist value
Wert.
In unserem Beispiel oben, den dataframe df
würde so enden:
order start end value key_value
1 1342 1357 category1 category29
1 1459 1489 category7 category31
....
Dies ist, weil wenn man sich key_df
die Zeile
1 1345 1392 category29
mit Intervall 1::1345-1392
fällt in das Intervall 1::1342-1357
im original df
. Ebenso die key_df
Reihe:
1 1471 1501 category31
entspricht der zweiten Zeile in df
:
1 1459 1489 category7 category31
Ich bin mir nicht ganz sicher
(1), wie diese Aufgabe in pandas
(2) wie groß diese effizient in pandas
Könnte man beginnen mit einer if-Anweisung, z.B.
if df.order == key_df.order:
# now check intervals...somehow
aber nicht die Vorteile der dataframe Struktur. Man muss dann überprüfen, indem Sie Intervall, d.h. so etwas wie (df.start =< key_df.start) && (df.end => key_df.end)
Ich bin stecken. Was ist der effizienteste Weg, um ein match mehrere Spalten in eine "Intervall" in pandas? (Erstellen einer neuen Spalte, wenn diese Bedingung erfüllt ist, ist dann einfach)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
merge
mitboolean Indizierung
, aber wennDataFrames
sind groß, Skalierung problematisch:EDIT by Kommentar:
value_key
für eine bestimmte Zeile dieser wird weggeworfen werden. Für unsere Zwecke, alle Zeilen indf
sind gut---keine verworfen werden sollte. Wenn keinevalue_key
anwendbar ist, die in einer gegebenen Zeile (d.h. es fällt nicht in der Pause), dann eineNaN
aufgenommen werden soll.merge
mit left join zu meinem code?df1 = pd.merge(df, df1, on=['order','start','end', 'value'], how='left')
?MemoryError
. Irgendwelche Ideen, wie man diese besser skalierbar? Statt der Zusammenlegung, viele eine for-Schleife? Hier der Fehler:File "pandas/src/join.pyx", line 187, in pandas.algos.full_outer_join
(pandas/algos.c:61680)
File "pandas/src/join.pyx", line 196, in
pandas.algos._get_result_indexer (pandas/algos.c:61978)
` MemoryError`