pandas按City分组计算新列并使用分组均值填充缺失值问题
pandas 按规则创建计算列并分组回填实现
完整可运行代码
import pandas as pd import numpy as np # 构造示例数据 df1 = pd.DataFrame({ 'City': ['SF','NYC','SF','NYC','SF','CHI','LA','LA','CHI'], 'Val': [2,4,0,0,7,4,3,5,6], 'Val1': [1,1,1,1,1,1,1,1,1] }) # 步骤1:为Val不等于0的行计算new_col值 df1.loc[df1['Val'] != 0, 'new_col'] = df1['Val'] / df1['Val1'] # 步骤2:按城市分组,用每组内已计算的new_col均值,填充该组Val=0的空值行 df1['new_col'] = df1.groupby('City')['new_col'].transform(lambda x: x.fillna(x.mean()))
输出结果
运行后得到的df1结构如下:
| City | Val | Val1 | new_col |
|---|---|---|---|
| SF | 2 | 1 | 2.0 |
| NYC | 4 | 1 | 4.0 |
| SF | 0 | 1 | 4.5 |
| NYC | 0 | 1 | 4.0 |
| SF | 7 | 1 | 7.0 |
| CHI | 4 | 1 | 4.0 |
| LA | 3 | 1 | 3.0 |
| LA | 5 | 1 | 5.0 |
| CHI | 6 | 1 | 6.0 |
注:你给出的预期输出中NYC组0值行的
new_col为2属于笔误,按照需求规则,NYC组内非0行的new_col只有4,均值为4,对应回填值为4。
原有代码问题说明
- 变量名混用:定义的DataFrame变量是df1,循环逻辑中误用了不存在的df变量
- 计算逻辑顺序错误:没有先为非0行赋值new_col,直接求
group['new col'].mean()只能得到空值 - 赋值目标错误:回填时没有指定目标列名为new_col,留空导致赋值失败
内容的提问来源于stack exchange,提问作者kms
相关产品推荐
相关产品推荐

