2016-12-27 4 views
3

(glaube ich) Ich habe einen Datensatz mit den Spalten repräsentieren datetime IntervalleResampling Pandas Spalten datetime

Die Säulen wurden in Datumzeit transformiert mit:

for col in df.columns: 
     df.rename({col: pd.to_datetime(col, infer_datetime_format=True)}, inplace=True) 

Dann brauche ich die Spalten resample (Jahr und Monat 2001-01 ') in Viertel mit mean

ich versuchte

df = df.resample('1q', how='mean', axis=1) 

Die DataFrame hat auch eine multindex gesetzt ['RegionName', 'County']

Aber ich bekomme die Fehlermeldung:

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index' 

Ist das Problem in der to_datetime Funktion oder in der falschen Sampling?

+0

können Sie die ersten paar Zeilen Ihres Datenrahmen posten? Die Anweisung 'df.rename' sollte basierend auf den von Ihnen angegebenen Informationen fehlschlagen. –

Antwort

3

(glaube ich) Sie jede Spalte Kopf umbenennen, anstatt machen die gesamten Spalten Objekt eine DatetimeIndex

dies stattdessen versuchen:

df.columns = pd.to_datetime(df.columns) 

Dann wird Ihr resample


laufen hinweis:
Ich würde es mit period nach der Umwandlung in DatetimeIndex tun. Auf diese Weise erhalten Sie den Zeitraum in Ihrer Spaltenüberschrift und nicht als Enddatum des Quartals.

df.groupby(df.columns.to_period('Q'), axis=1).mean() 

Demo

df = pd.DataFrame(np.arange(12).reshape(2, -1), 
        columns=['2011-01-31', '2011-02-28', '2011-03-31', 
          '2011-04-30', '2011-05-31', '2011-06-30']) 

df.columns = pd.to_datetime(df.columns) 

print(df.groupby(df.columns.to_period('Q'), axis=1).mean()) 

    2011Q1 2011Q2 
0  1  4 
1  7  10 
+0

Aber der Wert der Spalten ist eine andere Information (Preis - ich möchte den Mittelwert über die drei Monate (drei Spalten). Ich möchte die Köpfe tatsächlich als DateTime, damit ich die Monate in Viertel aggregieren kann. –

+0

Nein. Sie haben Recht Es hat funktioniert. Danke –

Verwandte Themen