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

如何将Pandas DataFrame空值替换为id=1指定行的对应列数值

问题场景

当前需要处理存在空单元格的DataFrame,示例数据如下:

import pandas as pd
df = pd.DataFrame(data={'id': [1, 2, 3, 1, 2, 3], 'id2': [1,1,1,2,2,2], 'color': ["red", "", "green", "yellow", "", "blue"], 'rate':["good","","good","average","","good"]})
print(df)

原始输出:

id  id2   color     rate
0   1    1     red     good
1   2    1                    
2   3    1   green     good
3   1    2  yellow  average
4   2    2                    
5   3    2    blue     good

需求为针对color和rate两列,将空值替换为同id2分组下id=1的行对应列的取值,不可使用前向填充方式,必须明确匹配id=1的行补全空单元格。最终期望输出如下:

id  id2   color     rate
0   1    1     red     good
1   2    1     red     good
2   3    1   green     good
3   1    2  yellow  average
4   2    2  yellow  average
5   3    2    blue     good

实现代码
# 将空字符串转为pandas空值类型,方便后续处理
df[['color', 'rate']] = df[['color', 'rate']].replace('', pd.NA)
# 提取每个id2分组下id=1对应字段的填充值
fill_map = df[df['id'] == 1].groupby('id2')[['color', 'rate']].first()
# 按id2分组填充空值
df = df.groupby('id2', group_keys=False).apply(lambda group: group.fillna(fill_map.loc[group.name]))
print(df)

逻辑说明
  • 先统一转换空字符串为标准空值类型,避免格式匹配异常
  • 直接筛选id=1的行按id2分组生成填充映射,完全符合“明确指定匹配id为1的行补全”的要求,没有用到前向/后向填充逻辑
  • 分组后直接调用fillna对应填充即可,列名会自动匹配,无需额外写列对应规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:45:02