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

Pandas DataFrame按a、b分组填充c列None值问题

解决Pandas分组填充None值的问题

你的需求很明确——按a和b的组合分组,用每组c列的均值填充组内的None值。先说说你原来代码的问题,再给你高效的解决方案:

你原有代码的问题

  1. 布尔索引写法错误:你写的df[df[('a'==1) & ('b'==1)]]完全不对。首先'a'==1是字符串和数字比较,结果永远是False,导致筛选不到任何行;其次正确的筛选方式应该是df[(df['a'] == 1) & (df['b'] == 1)],用括号把每个条件包起来,再用&连接。
  2. 只能处理单个分组:这种写法要手动指定每个a和b的组合,要是分组多的话,重复代码会非常繁琐,完全不高效。

正确的实现方法

用groupby结合transform是最简洁高效的方式,它会自动对每个分组计算均值并填充对应行的None:

步骤1:先构造你的DataFrame(方便测试)

import pandas as pd

# 构造你给出的数据集
df = pd.DataFrame({
    'a': [1,1,1,1,1,1,2,2,2,2,2],
    'b': [1,1,1,2,2,2,1,1,1,2,2],
    'c': [5.0, None, 4.0, 1.0, 1.0, 4.0, 3.0, 2.0, None, 3.0, 4.0]
})

步骤2:分组填充None值

# 按a和b分组,对每个分组的c列用组内均值填充None
df['c'] = df.groupby(['a', 'b'])['c'].transform(lambda x: x.fillna(x.mean()))

结果验证

执行后你的DataFrame会变成:

abc
115.0
114.5
114.0
121.0
121.0
124.0
213.0
212.0
212.5
223.0
224.0

代码解释

  • groupby(['a', 'b']):将DataFrame按a和b的唯一组合分成多个子组;
  • transform:会把每个分组的计算结果(这里是填充后的c列)映射回原DataFrame对应的行,保证索引对齐;
  • lambda x: x.fillna(x.mean()):对每个分组的c列,用该分组的均值填充其中的None值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:48:38