gpt4 book ai didi

python - Groupby 多级索引中的时间仓

转载 作者:行者123 更新时间:2023-12-01 00:40:28 25 4
gpt4 key购买 nike

我有一个稀疏填充的数据框,如下所示:

entity_id                                                              59e75f2b9e182f68cf25721d  59e75f2bc0bd722a5f395ee9  59e75f2c05e40310ebe1f433  ... 
organisation_id group_id datetime ...
59e7515edb84e482acce8339 59e75177575fc94638c1f8e7 2018-04-01 02:01:00 NaN NaN NaN ...
2018-04-01 02:02:00 NaN 2.15 NaN ...
2018-04-01 02:03:00 NaN NaN 3.689 ...
2018-04-01 02:04:00 NaN NaN NaN ...
2018-04-01 02:05:00 NaN NaN NaN ...
... ... ... ... ...
5cb590649f18c69541d34f7a 2019-04-01 01:55:00 NaN NaN NaN ...
2019-04-01 01:56:00 NaN NaN NaN ...
2019-04-01 01:57:00 NaN NaN NaN ...
2019-04-01 01:58:00 NaN NaN NaN ...
2019-04-01 01:59:00 NaN NaN NaN ...

我想通过 group_id 对此帧进行分组,并将 10 分钟的 bin 应用于日期时间索引(对于每个组,我希望对同一 10 分钟窗口内发生的值进行分组,以便我可以取列的平均值,本质上忽略日期时间索引的分钟部分)。

我尝试过使用 pd.Grouper(freq='10T') 但这似乎无法与多级索引结合使用。

group_mean = frame.groupby(
pd.Grouper(freq='10T'), level='datetime').mean(axis=1)

这给了我错误消息

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

作为引用,我想要的输出应该如下所示:

                                                                      group_mean
organisation_id group_id datetime
59e7515edb84e482acce8339 59e75177575fc94638c1f8e7 2018-04-01 02:10:00 mean(axis=1)
2018-04-01 02:20:00 mean(axis=1)
...

5cb590649f18c69541d34f7a 2019-04-01 01:50:00 mean(axis=1)
2019-04-01 02:00:00 mean(axis=1)
...

其中 mean(axis=1) 是该特定组和时间区间的所有非 NaN 列的平均值。

最佳答案

解决方案需要DatetimeIndex,因此首先将另一个级别转换为列并将其添加到list中的groupby:

注意:平均值是每组的平均值,而不是每列的平均值。

group_mean = (frame.reset_index(['organisation_id','group_id'])
.groupby(['organisation_id',
'group_id',
pd.Grouper(freq='10T',level='datetime')])
.mean())

如果需要每列的平均值:

df = frame.mean(axis=1)

关于python - Groupby 多级索引中的时间仓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57377975/

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