2017-07-20 2 views
0

Ich habe ein Datenframe, das eine Zeitstempelspalte und zwei Datenspalten enthält (data1 und data2).Resampling oder Reindexierung von zwei Datenspalten mit unterschiedlichen Frequenzen

Die data1 Spalte umfasst den gesamten Zeitstempel, während die data2 Spalte etwa auf halbem Wege anhält. Als ich meine Daten sammelte, sammelten beide data1 und data2 Daten für die gleiche Zeit, außer bei verschiedenen Frequenzen.

Ich möchte die data2 Spalte zu Ich verstehe, dass ich in Richtung der resample oder reindex Funktionen neigen sollte, aber ich bin mir nicht sicher, wie Sie dies tun. Meine Zeitstempelspalte ist ein Objekt, während meine zwei Datenspalten float64 Typen sind.

Was ist der einfachste Weg, um dieses Ziel zu erreichen?

Ich habe auf die folgende Frage zu beziehen versucht, aber ich hatte Schwierigkeiten es die Umsetzung mit: PANDAS - Loop over two datetime indexes with different sizes to compare days and values

enter image description here

+1

Bitte senden Sie ein Beispiel Ihres Datenrahmens und Ihrer gewünschten Ausgabe für potenzielle Beantworter, um Ihr Problem zu visualisieren. – ysearka

+0

Also entsprechen die Zeiten den Hochfrequenzdaten? Und Ihre Niedrigfrequenzdaten sind derzeit nicht mit einem korrekten Zeitstempel verknüpft? (außer bei 0) – GeoMatt22

+0

@ GeoMatt22 Korrekt - mein 'data1' entspricht dem Zeitstempel in meinem' .csv', während 'data2' nicht. Ich möchte, dass "data2" die Länge von "data1" überspannt. – Gary

Antwort

1

Hier ist, was ich denke, Sie zu tun versuchen. Meine Annahmen sind, dass Ihre Zeitstempel durch einen Multiplikator ausgerichtet sind. Ich habe alle 2 Minuten in meinem Beispiel verwendet, da das Ihr Beispiel zu sein scheint. Hier ist meine Probe Datenrahmen:

df 
         a  b 
DATE 
2017-05-29 06:30:00 0.0 0.0 
2017-05-29 06:31:00 9.0 24.0 
2017-05-29 06:32:00 10.0 1.0 
2017-05-29 06:33:00 10.0 1.0 
2017-05-29 06:34:00 0.0 7.0 
2017-05-29 06:35:00 3.0 3.0 
2017-05-29 06:36:00 0.0 4.0 
2017-05-29 06:37:00 0.0 1.0 
2017-05-29 06:38:00 0.0 0.0 
2017-05-29 06:39:00 0.0 2.0 
2017-05-29 06:40:00 0.0 NaN 
2017-05-29 06:41:00 0.0 NaN 
2017-05-29 06:42:00 0.0 NaN 
2017-05-29 06:43:00 0.0 NaN 
2017-05-29 06:44:00 0.0 NaN 
2017-05-29 06:45:00 2.0 NaN 
2017-05-29 06:46:00 4.0 NaN 
2017-05-29 06:47:00 0.0 NaN 
2017-05-29 06:48:00 4.0 NaN 
2017-05-29 06:49:00 8.0 NaN 

Extrahieren Sie die falsch ausgerichtete Spalte zu seinem eigenen Datenrahmen und einen Zähler Spalt hinzuzufügen, fügen Sie dann das Timedelta in den Index, ersetzen Sie den alten Index und die Datenspalten verketten.

b = df['b'][:10].to_frame() 
b.insert(0, 'counter', range(len(b))) 
b.index = b.index.to_series().apply(lambda x: x + pd.Timedelta(minutes=b.loc[x].counter)) 
pd.concat([df['a'], b['b']], axis=1) 
         a  b 
DATE 
2017-05-29 06:30:00 0.0 0.0 
2017-05-29 06:31:00 9.0 NaN 
2017-05-29 06:32:00 10.0 24.0 
2017-05-29 06:33:00 10.0 NaN 
2017-05-29 06:34:00 0.0 1.0 
2017-05-29 06:35:00 3.0 NaN 
2017-05-29 06:36:00 0.0 1.0 
2017-05-29 06:37:00 0.0 NaN 
2017-05-29 06:38:00 0.0 7.0 
2017-05-29 06:39:00 0.0 NaN 
2017-05-29 06:40:00 0.0 3.0 
2017-05-29 06:41:00 0.0 NaN 
2017-05-29 06:42:00 0.0 4.0 
2017-05-29 06:43:00 0.0 NaN 
2017-05-29 06:44:00 0.0 1.0 
2017-05-29 06:45:00 2.0 NaN 
2017-05-29 06:46:00 4.0 0.0 
2017-05-29 06:47:00 0.0 NaN 
2017-05-29 06:48:00 4.0 2.0 
2017-05-29 06:49:00 8.0 NaN 

Es geht wahrscheinlich ohne zu sagen, aber es wäre viel besser, korrekte Zeitstempel zu jeder der Spalten anwenden, wenn Sie sie einnehmen.

Verwandte Themen