如何在Pandas中按相似日期(忽略年份)分组?
按每年相同月日分组的解决方案
这个需求用 pandas 的 groupby 就能轻松实现,核心思路就是从 datetime 列里提取月-日的组合作为分组依据,这样每年的同一天就会自动归为一组。下面是具体的实现步骤:
步骤1:确保日期列是 datetime 类型
首先得确认你的日期列已经被正确解析成 pandas 的 datetime 类型,如果还没转换,先跑这一步:
import pandas as pd # 替换成你实际的日期列名 df['date_column'] = pd.to_datetime(df['date_column'])
步骤2:生成月-日分组键
从日期列中提取月份和日期的字符串组合(比如 '01-01'),用这个作为分组的标识:
# 创建月-日格式的分组键 df['month_day'] = df['date_column'].dt.strftime('%m-%d')
步骤3:执行分组操作
用 groupby 按刚生成的 month_day 列分组,这样就得到了每年相同日期的分组集合:
# 按月-日分组,得到分组对象 grouped_data = df.groupby('month_day')
步骤4:使用分组结果
你可以根据需求灵活使用这些分组:
- 获取某一天的分组数据(比如查看所有年份的1月1日数据):
jan_first_group = grouped_data.get_group('01-01') print(jan_first_group) - 遍历所有分组并处理数据(比如计算每组的关联数据均值):
for month_day, group in grouped_data: print(f"=== 日期 {month_day} 的数据统计 ===") print(group['关联数据列名'].mean()) # 替换成你实际的关联数据列名
注意:处理闰年的2月29日
你的数据范围包含2008、2012这两个闰年,这些年份会有2月29日的数据。如果严格需要365组,你可以把2月29日的数据合并到2月28日(或者其他你指定的日期):
# 将闰年的2月29日映射为2月28日,保证分组总数为365 df['month_day'] = df['month_day'].replace('02-29', '02-28') # 重新执行分组 grouped_data = df.groupby('month_day')
这样处理后,就刚好得到365组对应每年相同日期的数据了。
内容的提问来源于stack exchange,提问作者akash
相关产品推荐
相关产品推荐

