如何按年中日期分组?Python温度数据跨年度最值统计需求
问题描述
我有一份年度每日温度数据,数据结构如下:
| ID | Date | Element | Data_Value | |
|---|---|---|---|---|
| 0 | USW00094889 | 12/11/2014 | TMAX | 22 |
| 1 | USC00208972 | 29/04/2009 | TMIN | 56 |
| 2 | USC00200032 | 26/05/2008 | TMAX | 278 |
| 3 | USC00205563 | 11/11/2005 | TMAX | 139 |
| 4 | USC00200230 | 27/02/2014 | TMAX | -106 |
我已通过以下代码过滤闰年2月29日及Data_Value为0的数据,对2005-2015年的数据按Date字段分组,聚合得到各日期的最值:
dfMAX=df[(df['Element']=='TMAX') & (df['Data_Value']!=0) & (~df.Date.str.startswith('29/02'))].groupby("Date").agg({"Data_Value":np.max}) dfMIN=df[(df['Element']=='TMIN') & (df['Data_Value']!=0) & (~df.Date.str.startswith('29/02'))].groupby("Date").agg({"Data_Value":np.min})
当前输出为各年度对应日期的最值,但我需要按年中日期(如01-01)分组,统计2005-2014年间对应日期的温度最大/最小值,日期为字符串格式,期望结果如下:
| Day | Data_Value |
|---|---|
| 01-01 | # 2005-2014年1月1日的最高温 |
| 01-02 | # 2005-2014年1月2日的最高温 |
| 01-03 | # 2005-2014年1月3日的最高温 |
| 01-04 | # 2005-2014年1月4日的最高温... |
解决方案
要实现按年中日期分组统计,需先提取月-日格式的日期字段,再筛选2005-2014年的数据,最后分组聚合:
1. 提取月-日格式日期
从原始Date字段(格式为DD/MM/YYYY)中拆分出月和日,拼接成MM-DD格式的Day字段:
df['Day'] = df['Date'].str.split('/').apply(lambda x: f"{x[1]}-{x[0]}")
2. 筛选2005-2014年数据
提取年份并过滤出目标时间范围的数据:
df['Year'] = df['Date'].str.split('/').apply(lambda x: int(x[2])) df_filtered = df[(df['Year'] >= 2005) & (df['Year'] <= 2014)]
3. 分组聚合最值
结合原有过滤规则,按Day分组统计最高/最低温度:
# 统计2005-2014年各日期最高温 dfMAX = df_filtered[(df_filtered['Element'] == 'TMAX') & (df_filtered['Data_Value'] != 0) & (~df_filtered['Date'].str.startswith('29/02'))] \ .groupby('Day')['Data_Value'].max().reset_index() # 统计2005-2014年各日期最低温 dfMIN = df_filtered[(df_filtered['Element'] == 'TMIN') & (df_filtered['Data_Value'] != 0) & (~df_filtered['Date'].str.startswith('29/02'))] \ .groupby('Day')['Data_Value'].min().reset_index()
4. 可选:按日期排序
若需要结果按日期顺序排列,可添加排序逻辑:
dfMAX = dfMAX.sort_values('Day').reset_index(drop=True) dfMIN = dfMIN.sort_values('Day').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者user21294168
相关产品推荐
相关产品推荐

