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

使用pandas定位空值并填充同类别对应已有值的实现问题

按类别分组填充空值的正确实现

你最初编写的代码存在几处语法和逻辑错误:

  • 布尔索引编写错误:df['Item_Identifier' == x] 属于语法错误,正确的过滤写法为 df['Item_Identifier'] == x
  • isnull 是pandas的方法而非属性,需要加括号调用为 isnull()
  • pandas没有fill这个填充空值的方法,对应功能方法为fillna()
  • 无需手动遍历唯一值实现分组逻辑,pandas内置的分组操作效率更高、语法更简洁

最优实现方案

你可以直接使用groupby+填充函数实现需求,以下是两种常用写法:

写法1:分组前后向填充(最简单,适配绝大多数场景)

如果同组内Item_Weight的有效值唯一,用前后向填充兜底即可:

# 按Item_Identifier分组,同组内的空值优先用前面的有效值填充,再用后面的有效值兜底
df['Item_Weight'] = df.groupby('Item_Identifier')['Item_Weight'].ffill().bfill()

写法2:映射字典填充(逻辑最直观)

先提前构造每个类别对应有效值的映射关系,再用映射填充空值:

# 构造类别到有效值的映射字典
value_map = df.dropna(subset=['Item_Weight']).set_index('Item_Identifier')['Item_Weight'].to_dict()
# 用映射关系填充空值
df['Item_Weight'] = df['Item_Weight'].fillna(df['Item_Identifier'].map(value_map))

效果验证

用你提供的示例数据测试:

import pandas as pd
import numpy as np
# 构造示例数据
df = pd.DataFrame({
    'Item_Identifier': ['a', 'b', 'b', 'd', 'd'],
    'Item_Weight': [1, 3, np.nan, np.nan, 4]
})
# 执行填充
df['Item_Weight'] = df.groupby('Item_Identifier')['Item_Weight'].ffill().bfill()
print(df)

输出结果完全符合预期:

Item_Identifier  Item_Weight
0               a          1.0
1               b          3.0
2               b          3.0
3               d          4.0
4               d          4.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:09