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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:16:06