Jupyter Notebook中按分组均值替换DataFrame指定列NaN值问题
问题解决:按分组均值填充指定列NaN值
原代码错误点
- 拼写错误:
grouby应为groupby,tranform应为transform - 列名大小写不匹配:原数据分组列是
Types,不是小写types fillna用法错误:fillna['s_months']写法不合法,且同时使用赋值和inplace=True逻辑冲突- 分组索引选取语法错误:列选择的括号位置不符合pandas规范
正确实现代码
写法1(单句紧凑实现):
df[['s_months', 'incidents']] = df.groupby(['Types', 'o_periods'])[['s_months', 'incidents']].transform(lambda x: x.fillna(x.mean()))
写法2(拆分逻辑更易读):
# 1. 按分组计算两列的均值,transform会把结果映射到原数据的每一行 group_means = df.groupby(['Types', 'o_periods'])[['s_months', 'incidents']].transform('mean') # 2. 用对应分组的均值填充NaN值 df[['s_months', 'incidents']] = df[['s_months', 'incidents']].fillna(group_means)
填充效果验证
运行后原数据的NaN行将被正确填充:
- Types=1、o_periods=1的行:s_months填充为911,incidents填充为3
- Types=2、o_periods=1的行:s_months填充为26851,incidents填充为36
内容的提问来源于stack exchange,提问作者Nicholas Kim
相关产品推荐
相关产品推荐

