如何在时间戳上正确使用分组?

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.Grouperfreq="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 数量。

以上是关于如何在时间戳上正确使用分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何手动或在未来的时间戳上逐出 hazelcast 缓存

在时间戳上创建索引以优化查询

在时间戳上查询 mongo

在不完全匹配的时间戳上合并两个熊猫数据框

Swift:使用时间戳渲染转录

如何使用时间戳从短短 20 天内选择 SQL 数据