You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中用2020与2021数据均值替换2020年行的数值?

问题

我有一个包含group、date和value列的DataFrame,日期为月度级别。由于2020年数据受新冠疫情影响,我想用2020年和2021年对应数据的均值来填充2020年的数值,请问如何实现?

输入示例:

import pandas as pd

input_df = pd.DataFrame({
    'group': ['A', 'A', 'A','A', 'B','B','B','B','A','B'],
    'date': ['2020-01-31', '2021-01-31', '2020-03-31','2021-03-31', '2020-01-31', '2021-01-31', '2020-03-31','2021-03-31','2022-01-31', '2022-02-28'],
    'value': [10, 20, 30, 40,0, 20, 20, 40,10, 20 ]
})

期望输出:

output_df = pd.DataFrame({
    'group': ['A', 'A', 'A','A', 'B','B','B','B','A','B'],
    'date': ['2020-01-31', '2021-01-31', '2020-03-31','2021-03-31', '2020-01-31', '2021-01-31', '2020-03-31','2021-03-31','2022-01-31', '2022-02-28'],
    'value': [15, 20, 35, 40, 10, 20, 30, 40,10, 20 ]
})
解决方案

步骤1:处理日期字段

先将date列转换为datetime类型,再提取年份和月份字段,为后续按「分组+月份」聚合计算做准备:

input_df['date'] = pd.to_datetime(input_df['date'])
input_df['year'] = input_df['date'].dt.year
input_df['month'] = input_df['date'].dt.month

步骤2:计算目标均值

筛选出2020和2021年的数据,按group和month分组后,计算每组的均值:

mean_df = (input_df[input_df['year'].isin([2020, 2021])]
           .groupby(['group', 'month'])['value']
           .mean()
           .reset_index(name='mean_value'))

步骤3:替换2020年的数据

将原数据与均值表合并,对2020年的行用均值替换原value,最后清理临时字段:

merged = input_df.merge(mean_df, on=['group', 'month'], how='left')
merged['value'] = merged.apply(lambda row: row['mean_value'] if row['year'] == 2020 else row['value'], axis=1)
result = merged.drop(['year', 'month', 'mean_value'], axis=1)

验证结果

运行上述代码后,result与期望输出一致:

group       date  value
0     A 2020-01-31   15.0
1     A 2021-01-31   20.0
2     A 2020-03-31   35.0
3     A 2021-03-31   40.0
4     B 2020-01-31   10.0
5     B 2021-01-31   20.0
6     B 2020-03-31   30.0
7     B 2021-03-31   40.0
8     A 2022-01-31   10.0
9     B 2022-02-28   20.0

内容的提问来源于stack exchange,提问作者NAS_2339

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:32:43