gpt4 book ai didi

python - 多索引上的 Pandas TimeGrouper

转载 作者:太空狗 更新时间:2023-10-29 20:55:39 26 4
gpt4 key购买 nike

我有一个 multiIndex pandas 数据框,其中第一级索引是一个组,第二级索引是时间。我想要做的是,在每个组内,以日内观察的平均值重新采样到每日频率。

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'

知道如何解决这个问题吗?

最佳答案

您需要先将 column 转换为 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

另一种解决方案:

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

关于python - 多索引上的 Pandas TimeGrouper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com