基于DataFrame按A列分组,用组内均值补全B列NaN
按分组均值填充缺失值的解决方案
刚好处理过类似需求,直接给你简洁高效的实现方式:
首先先还原你的示例数据(如果已经有现成的DataFrame可跳过这步):
import pandas as pd import numpy as np df = pd.DataFrame({ 'A': [1,1,1,2,2], 'B': [100.0, np.nan, 200.0, 100.0, np.nan] })
核心处理代码就一行,用groupby结合transform实现分组填充:
df['B'] = df.groupby('A')['B'].transform(lambda x: x.fillna(x.mean()))
运行后会得到这样的结果:
A B 0 1 100.0 1 1 150.0 2 1 200.0 3 2 100.0 4 2 100.0
简单解释下原理:
groupby('A')将DataFrame按A列的取值分成两组(A=1和A=2)transform是关键:它会保留原数据的索引结构,对每组计算B列的均值后,返回和原数据行数一致的结果,确保能精准对应到每组的缺失值位置- 每组内用
x.fillna(x.mean())把NaN替换为该组的均值:A=1组的B列均值是(100+200)/2=150,刚好填充对应NaN;A=2组只有一个有效值100,均值就是100,填充对应的NaN
如果想要把B列转成整数格式(和你预期的输出完全一致),再加一行转换代码即可:
df['B'] = df['B'].astype(int)
最终输出结果:
A B 0 1 100 1 1 150 2 1 200 3 2 100 4 2 100
内容的提问来源于stack exchange,提问作者wangtianye
相关产品推荐
相关产品推荐

