Pandas ausrichten mehrere dataframes mit TimeStamp-index
Dieser wurde der Fluch meines Lebens für die letzten paar Tage. Ich habe zahlreiche Pandas Dataframes enthalten Zeitreihen mit unregelmäßigen Frequenzen. Ich versuche, richten Sie diese in einem einzigen dataframe.
Unten ist ein code, mit Vertreter dataframes, df1
, df2
, und df3
( eigentlich habe ich n=5, und würden uns freuen, eine Lösung, die funktionieren würde für alle n>2
):
# df1, df2, df3 are given at the bottom
import pandas as pd
import datetime
# I can align df1 to df2 easily
df1aligned, df2aligned = df1.align(df2)
# And then concatenate into a single dataframe
combined_1_n_2 = pd.concat([df1aligned, df2aligned], axis =1 )
# Since I don't know any better, I then try to align df3 to combined_1_n_2 manually:
combined_1_n_2.align(df3)
error: Reindexing only valid with uniquely valued Index objects
Ich habe eine Idee warum ich diese Fehlermeldung erhalten, so dass ich loswerden das doppelte Indizes in combined_1_n_2
und versuchen Sie es erneut:
combined_1_n_2 = combined_1_n_2.groupby(combined_1_n_2.index).first()
combined_1_n_2.align(df3) # But stll get the same error
error: Reindexing only valid with uniquely valued Index objects
Warum bin ich immer diese Fehlermeldung? Selbst wenn dies funktioniert, ist es komplett manuell und hässlich. Wie kann ich ausrichten - >2 der Zeit-Serie und kombinieren Sie Sie in einem dataframe?
Daten:
df1 = pd.DataFrame( {'price' : [62.1250,62.2500,62.2375,61.9250,61.9125 ]},
index = [pd.DatetimeIndex([datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f')])[0]
for s in ['2008-06-01 06:03:59.614000', '2008-06-01 06:03:59.692000',
'2008-06-01 06:15:42.004000', '2008-06-01 06:15:42.083000','2008-06-01 06:17:01.654000' ] ])
df2 = pd.DataFrame({'price': [241.0625, 241.5000, 241.3750, 241.2500, 241.3750 ]},
index = [pd.DatetimeIndex([datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f')])[0]
for s in ['2008-06-01 06:13:34.524000', '2008-06-01 06:13:34.602000',
'2008-06-01 06:15:05.399000', '2008-06-01 06:15:05.399000','2008-06-01 06:15:42.082000' ] ])
df3 = pd.DataFrame({'price': [67.656, 67.875, 67.8125, 67.75, 67.6875 ]},
index = [pd.DatetimeIndex([datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f')])[0]
for s in ['2008-06-01 06:03:52.281000', '2008-06-01 06:03:52.359000',
'2008-06-01 06:13:34.848000', '2008-06-01 06:13:34.926000','2008-06-01 06:15:05.321000' ] ])
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre spezifischen Fehler wird durch die Namen der Spalten
combined_1_n_2
dass Duplikate (beide Spalten werden mit dem Namen 'Preis'). Könnten Sie benennen Sie die Spalten und der zweite align funktionieren würde.Eine alternative Möglichkeit wäre, die Kette
join
Betreiber, verschmilzt frames auf dem index, wie unten.align()
ist unnötig, wenn ich die Kette verbindet?join
behandelt die index-Logik für Sie.align
.