如何将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
相关产品推荐
相关产品推荐

