在我原来的帖子中,我建议使用pd.TimeGrouper
。
如今,使用pd.Grouper
代替pd.TimeGrouper
。语法基本相同,但是TimeGrouper
现已弃用有利于pd.Grouper
.
此外,虽然pd.TimeGrouper
只能按 DatetimeIndex 分组,pd.Grouper
可以按日期时间分组columns您可以通过以下方式指定key范围.
你可以使用pd.Grouper按小时对 DatetimeIndex'ed DataFrame 进行分组:
grouper = df.groupby([pd.Grouper(freq='1H'), 'Location'])
use 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
use unstack移动Location
索引级别到列级别:
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)
yields
Location HK LDN
2014-08-25 21:00:00 1 1
2014-08-25 22:00:00 0 2