【问题标题】: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() 但我当然无法绘制它们,因为它们的形状不同。

【问题讨论】:

    标签: python pandas datetime time-series data-analysis


    【解决方案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 数量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2016-08-23
    • 2019-12-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2017-10-29
    相关资源
    最近更新 更多