【问题标题】:How to group by day of the year and the calculate the max value in pandas如何按一年中的一天分组并计算熊猫中的最大值
【发布时间】:2020-07-28 19:40:35
【问题描述】:

我有从 2005 年到 2014 年的时间序列数据,其中包含一年中每一天的条目以及相应的最高温度。我从一个名为 data 的更大数据集创建了这个系列。

In[80]: data
Out[80]: 
            ID        Date Element  Data_Value
41334  USC00208080  2005-01-01    TMAX          33
55428  USC00207308  2005-01-01    TMIN         -44
32266  USC00208202  2005-01-01    TMAX         150
2073   USC00203712  2005-01-01    TMAX         144
55424  USC00207308  2005-01-01    TMAX         150

In[79]: max_temp
Out[79]: 
Date
2005-01-01    156
2005-01-02    139
2005-01-03    133
2005-01-04     39
2005-01-05     33

max_temp = data.groupby("Date")["Data_Value"].max()

如您所见,这将返回每年每个日期的最大值。我想要做的是找到 2005-2014 范围内每一天的最大值

想要的结果:

In[79]: max_temp
Out[79]: 
Date
01-01    # max for Jan 1st between 2005-2014
01-02    # max for Jan 2nd between 2005-2014
01-03    # max for Jan 3rd between 2005-2014
01-04    # max for Jan 4th ...
01-05    # max for Jan 5th ...

我从 group by 的其他 SO 线程中尝试了几种方法,但我似乎找不到合适且简单的答案,因为我觉得这不是一个复杂的请求。但是,我对 pandas 和 SO 比较陌生,因此非常感谢任何帮助或指向正确答案的指针。

谢谢!

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    首先,我建议将日期时间拆分为日、月和年。

    data['year'] = data['Date'].dt.year
    data['month'] = data['Date'].dt.month
    data['day'] = data['Date'].dt.day 
    

    然后你可以只按天和月分组

    max_temp = data.groupby(['month','day')["Data_Value"].max()
    

    【讨论】:

      【解决方案2】:

      首先,直接回答您的问题。您需要 dt 访问器从 datetime64 列中获取日期或月份:

      max_temp = data.groupby([data["Date"].dt.month, data["Date"].dt.day])["Data_Value"].max()
      

      话虽如此,从气象学的角度来看,使用一年中某一天的统计数据没有意义,因为温度(或其他气象测量值)变化太大。专业人士使用全年、季度、月或十年(1-10、11-20、21-end_of_month)的统计数据。使用较短的周期只会增加噪音。

      【讨论】:

        猜你喜欢
        • 2020-04-20
        • 1970-01-01
        • 2020-12-14
        • 2020-03-24
        • 2019-12-12
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        相关资源
        最近更新 更多