gpt4 book ai didi

python - Pandas:使用 groupby 重新采样时间序列

转载 作者:IT老高 更新时间:2023-10-28 21:56:21 30 4
gpt4 key购买 nike

鉴于以下 pandas DataFrame:

In [115]: times = pd.to_datetime(pd.Series(['2014-08-25 21:00:00','2014-08-25 21:04:00',
'2014-08-25 22:07:00','2014-08-25 22:09:00']))
locations = ['HK', 'LDN', 'LDN', 'LDN']
event = ['foo', 'bar', 'baz', 'qux']
df = pd.DataFrame({'Location': locations,
'Event': event}, index=times)
df
Out[115]:
Event Location
2014-08-25 21:00:00 foo HK
2014-08-25 21:04:00 bar LDN
2014-08-25 22:07:00 baz LDN
2014-08-25 22:09:00 qux LDN

我想重新采样数据以每小时按计数聚合它,同时按位置分组以生成如下所示的数据框:

Out[115]:
HK LDN
2014-08-25 21:00:00 1 1
2014-08-25 22:00:00 0 2

我尝试了 resample() 和 groupby() 的各种组合,但没有运气。我该怎么办?

最佳答案

在我原来的帖子中,我建议使用 pd.TimeGrouper。现在,使用 pd.Grouper 代替 pd.TimeGrouper。语法大体相同,但 TimeGrouper is now deprecated支持 pd.Grouper

此外,虽然 pd.TimeGrouper 只能按 DatetimeIndex 分组,但 pd.Grouper 可以按 datetime columns 分组,您可以通过key parameter .


您可以使用 pd.Grouper按小时对 DatetimeIndex 的 DataFrame 进行分组:

grouper = df.groupby([pd.Grouper(freq='1H'), 'Location'])

使用count统计每组的事件个数:

grouper['Event'].count()
# Location
# 2014-08-25 21:00:00 HK 1
# LDN 1
# 2014-08-25 22:00:00 LDN 2
# Name: Event, dtype: int64

使用 unstackLocation 索引级别移动到列级别:

grouper['Event'].count().unstack()
# Out[49]:
# Location HK LDN
# 2014-08-25 21:00:00 1 1
# 2014-08-25 22:00:00 NaN 2

然后使用 fillna 将 NaN 更改为零。


把它们放在一起,

grouper = df.groupby([pd.Grouper(freq='1H'), 'Location'])
result = grouper['Event'].count().unstack('Location').fillna(0)

产量

Location             HK  LDN
2014-08-25 21:00:00 1 1
2014-08-25 22:00:00 0 2

关于python - Pandas:使用 groupby 重新采样时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012012/

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