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

如何基于Pandas DataFrame的B列将A列值替换为对应分组均值?

解决Pandas按分组替换列值为分组均值的问题

首先还原你的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [70.0, np.nan, 28.0, 75.0, 56.0, 84.0, np.nan, 19.0, 93.0, 94.0, 72.0],
    'B': [20, 20, 100, 120, 30, 90, 100, 10, 80, 70, 20]
})

你之前的代码无效是因为lambda表达式里使用了赋值操作s=s.mean(),lambda需要直接返回计算结果,而非赋值。

最优实现方式

最简洁高效的写法是直接给transform传入'mean'参数,Pandas会自动忽略NaN计算分组均值,并将结果广播到对应行:

df['AA'] = df.groupby('B')['A'].transform('mean')

如果想用lambda表达式,正确写法是直接返回分组均值:

df['AA'] = df.groupby('B')['A'].transform(lambda x: x.mean())

执行后得到的关键结果示例:

  • B=20的分组,A列有效均值为(70+72)/2=71,对应3行的AA列均为71
  • B=100的分组,A列仅28.0有效,对应2行的AA列均为28.0
  • 所有行的AA列都会被替换为对应B分组下A列的均值(自动忽略NaN)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:54:22