如何在时间戳上正确使用分组?
Posted
技术标签:
【中文标题】如何在时间戳上正确使用分组?【英文标题】:How to use group-by on timestamps correctly? 【发布时间】:2020-05-24 08:36:55 【问题描述】:我有一整年每一分钟的时间序列数据。
timestamp day hour min rainfall_rate
2010-01-01 00:00:00 1 0 0 x
2010-01-01 00:01:00 1 0 1 x
2010-01-01 00:02:00 1 0 2 x
2010-01-01 00:03:00 1 0 3 x
2010-01-01 00:04:00 1 0 4 x
... ...
2010-12-31 23:55:00 365 23 55
2010-12-31 23:56:00 365 23 56
2010-12-31 23:57:00 365 23 57
2010-12-31 23:58:00 365 23 58
2010-12-31 23:59:00 365 23 59
我想组合时间戳,这样我就可以获得每个月的组合 rainfall_rate
,即我想使用 group-by
根据日期组合它们,并将它们与轴一起绘制为时间戳以进一步分析。
如何使用 pandas 执行此操作?
我用过-
daily_groups = rainfall_df.groupby(rainfall_df.index.date)
然后
daily_groups.get_group(pd.Timestamp(2010,1,1))['rainfall_rate'].sum()
但我当然无法绘制它们,因为它们的形状不同。
【问题讨论】:
【参考方案1】:将pd.Grouper
与freq="M"
一起使用:
print (df.groupby(pd.Grouper(freq="M"))["rainfall_rate"].count())
#
timestamp
2010-01-31 5
2010-02-28 0
2010-03-31 0
2010-04-30 0
2010-05-31 0
2010-06-30 0
2010-07-31 0
2010-08-31 0
2010-09-30 0
2010-10-31 0
2010-11-30 0
2010-12-31 0
【讨论】:
您还可以将列时间戳转换为仅包含月份的列。但是@Henry Yik 的解决方案看起来很棒。 `雨量_df['月_年'] =雨量_df['时间戳'].dt.to_period('M')' OP 想要获取每个月的总降雨量,而不是分配一个新列。 当然,那么需要groupby。 你能解释一下代码吗,我是初学者? @HenryYik @random_user 没有什么特别的 - 您的索引已经是datetime
,因此您可以使用 pd.Grouper
按月对它们进行分组,然后计算每个组的 rainfall_rate
数量。以上是关于如何在时间戳上正确使用分组?的主要内容,如果未能解决你的问题,请参考以下文章