2017-09-27 3 views
0

Ich versuche, einen Pandas-Datenrahmen zu Zeitstempeln zwischen einer Start- und Stoppzeit zu filtern und dann einen Wert in Zeilen einer angegebenen Spalte zu platzieren, wenn diese Bedingungen erfüllt sind. Ich habe mehrere hundert Items, die zusammen auftreten und versuchen es skalierbar zu machen. Es gibt mir nicht das erwartete Verhalten, die Werte in die angegebenen Zeilen zu platzieren und dann zur nächsten Bedingung überzugehen, um Elemente in diese Zeilen zu platzieren. Stattdessen überschreibt es jedes Mal, wenn ich den Code ausführe, die letzten Werte. Bitte beachten Sie den Pseudocode unten. Irgendwelche Gedanken/Ideen wären hilfreich, um damit umzugehen.Filtern und Platzieren von Werten in Datenrahmen mit Pandas

HINWEIS: Ich habe über die Verwendung der Methode apply gedacht, aber ich habe 400 X 60 Arten von verschiedenen Werten, die ich über Millionen von Zeilen von Daten durchlaufen müsste, und so scheint es eine Filtermethode wäre am vorteilhaftesten .

transactional_df[(transactional_df.timestamp > start1) & (transactional_df.timestamp < stop1)]['new_col'] = item1 
transactional_df[(transactional_df.timestamp > start2) & (transactional_df.timestamp < stop2)]['new_col'] = item2 

Gewünschtes Ergebnis:

transactional_df.col1...new_col 
Condition1 Met   item1 
Condition2 Met   item2 
+0

überprüfen Zero Antwort https://stackoverflow.com/questions/46179362/fastest-way-to-merge-pandas-dataframe-on-ranges – Wen

Antwort

0
transactional_df['new_col']=[item1 if ((x>start1) & (x<stop1)) else item2 for x in transactional_df['timestamp']] 
+0

Ich habe eine ähnliche Art von Code für Daten verwendet, die eine Größe von Millionen haben. Also hoffe das hilft – user3687197

+0

Ein Listenverständnis wird nicht sehr nützlich für ein df in der Größe von Millionen sein. –

Verwandte Themen