Pandas如何按月日组合计算多年平均值并新增列
解决方案
要实现按月日组合计算val列的平均值并新增对应列,可按以下步骤操作:
1. 确保日期列为datetime类型
先将record_date转换为datetime格式(若尚未转换):
import pandas as pd # 假设你的DataFrame名为df df['record_date'] = pd.to_datetime(df['record_date'])
2. 按月日分组计算平均值
提取日期的月日字符串作为分组键,计算每个月日组合对应的val平均值:
# 生成月日-均值的映射表 daily_avg_map = df.groupby(df['record_date'].dt.strftime('%m-%d'))['val'].mean()
3. 映射生成新列
将计算好的平均值映射回原DataFrame,新增daily_average_val列:
df['daily_average_val'] = df['record_date'].dt.strftime('%m-%d').map(daily_avg_map)
扩展:处理未来年份的日期
如果后续DataFrame加入了2024、2025年的日期(如2024-01-01),只需重复提取月日并映射现有均值即可,无需重新计算分组:
# 示例:新增2024年1月1日的行 new_row = pd.DataFrame({'record_date': ['2024-01-01'], 'val': [0.5]}) df = pd.concat([df, new_row], ignore_index=True) df['record_date'] = pd.to_datetime(df['record_date']) # 直接映射已有均值 df['daily_average_val'] = df['record_date'].dt.strftime('%m-%d').map(daily_avg_map)
这样所有相同月日的行,无论年份如何,都会共享同一个平均值。
内容的提问来源于stack exchange,提问作者Shankze
相关产品推荐
相关产品推荐

