如何按年份分组并计算熊猫的最大值

时间:2020-07-28 11:28:59

标签: python pandas datetime

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

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线程中尝试了几种方法,但是由于感觉这不是一个复杂的请求,因此似乎找不到合适且简单的答案。但是,我对熊猫和SO还是比较陌生,因此任何帮助或指向正确答案的指针将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:2)

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

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()

答案 1 :(得分:0)

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

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

从气象学的角度来说,在一年中的一天使用统计数据是没有意义的,因为温度(或其他气象测量方法)的变化太大。专业人员在整个年度,季度,月份或十年(1-10、11-20、21个月末)使用统计信息。使用较短的时间只会增加噪音。