Pandas TimeGrouper на мультииндексе

У меня есть мультииндекс pandas dataframe, где индекс первого уровня – это группа, а индекс второго уровня – время. То, что я хочу сделать, – в пределах каждой группы – пересдать на ежедневную частоту, принимая среднее значение внутридневных наблюдений.

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']) 

Это то, что я пробовал до сих пор:

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

Но я получаю следующую ошибку:

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

Любая идея, как это решить?

Вам нужно, чтобы первый столбец броска float а затем используйте Grouper :

 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 

Другое решение:

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