如何基于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
相关产品推荐
相关产品推荐

