我有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还是比较陌生,因此任何帮助或指向正确答案的指针将不胜感激。
谢谢!
答案 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个月末)使用统计信息。使用较短的时间只会增加噪音。