2017-01-05 5 views
4

Ich habe einen MultiIndex Pandas Datenrahmen, wobei der Index der ersten Ebene eine Gruppe und der Index der zweiten Ebene Zeit ist. Was ich tun möchte, ist, innerhalb jeder Gruppe auf die tägliche Frequenz zu resampeln, wobei der Durchschnitt der Intraday-Beobachtungen genommen wird.Pandas TimeGroup auf Multiindex

import pandas as pd 
import numpy as np 

data = pd.concat([pd.DataFrame([['A']*72, list(pd.date_range('1/1/2011', periods=72, freq='H')), list(np.random.rand(72))], index = ['Group', 'Time', 'Value']).T, 
        pd.DataFrame([['B']*72, list(pd.date_range('1/1/2011', periods=72, freq='H')), list(np.random.rand(72))], index = ['Group', 'Time', 'Value']).T, 
        pd.DataFrame([['C']*72, list(pd.date_range('1/1/2011', periods=72, freq='H')), list(np.random.rand(72))], index = ['Group', 'Time', 'Value']).T], 
        axis = 0).set_index(['Group', 'Time']) 

Das ist, was ich bisher versucht:

daily_counts = data.groupby(pd.TimeGrouper('D'), level = ['Time']).mean() 

Aber ich erhalte den folgenden Fehler:

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex' 

Jede Idee, wie dieses Problem zu lösen?

Antwort

6

Sie müssen zuerst gegossenen Säule float und dann Grouper verwenden:

data['Value'] = data['Value'].astype(float) 
daily_counts = data.groupby([pd.TimeGrouper('D', level='Time'), 
          pd.Grouper(level='Group')])['Value'].mean() 

print (daily_counts) 
Time  Group 
2011-01-01 A  0.548358 
      B  0.612878 
      C  0.544822 
2011-01-02 A  0.529880 
      B  0.437062 
      C  0.388626 
2011-01-03 A  0.563854 
      B  0.479299 
      C  0.557190 
Name: Value, dtype: float64 

Eine andere Lösung:

data = data.reset_index(level='Group') 
print (data.groupby('Group').resample('D')['Value'].mean()) 
+0

Vielen Dank das ist mein Problem gelöst. Also ich denke, das wichtigste Take-Away ist, dass, wenn ich auf einem MultiIndex gruppieren möchte, ich noch alle Indexstufen als Zackenbarsche bestehen muss. Ist es fair? – FLab

+0

Ja, aber vielleicht ist die zweite Lösung häufiger, siehe [hier] (http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#groupby-syntax-with-window-and-resample- operations). – jezrael

+0

Auf Ihrer zweiten Lösung, Hervorhebung dieses Bugs (behoben in Pandas 0,19), die Kwargen in resample verhindern könnte: https://github.com/pandas-dev/pandas/issues/13235 – FLab

Verwandte Themen