简体   繁体   English

Pandas TimeGrouper on multiindex

[英]Pandas TimeGrouper on multiindex

I have a multiIndex pandas dataframe, where the first level index is a group and the second level index is time. 我有一个multiIndex pandas数据帧,其中第一级索引是一个组,第二级索引是时间。 What I want to do is, within each group, to resample to daily frequency taking the average of intraday observations. 我想要做的是,在每个组中,采用日内观察的平均值重新采样到每日频率。

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

This is what I tried so far: 这是我到目前为止所尝试的:

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

But I get the following error: 但是我收到以下错误:

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

Any idea how to solve this? 不知道怎么解决这个问题?

You need first cast column to float and then use Grouper : 你需要先将cast列float然后使用Grouper

data['Value'] = data['Value'].astype(float)
daily_counts = data.groupby([pd.Grouper(freq='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

Another solution: 另一种方案:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM