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

如何用Pandas依据另一列对应值填充DataFrame同列空白值

在Pandas中基于关联列填充同列空白值

问题场景

需要根据Acc num列的关联值(含格式变体,如100250--与100250属于同一账户组),填充Bank name列的NaN值。

初始DataFrame

Acc numBank name
100250--NaN
100250NaN
100250NaN
100250SBI
200100NaN
200100NaN
200100ICICI
200100NaN

期望输出

Acc numBank name
100250--SBI
100250SBI
100250SBI
100250SBI
200100ICICI
200100ICICI
200100ICICI
200100ICICI

解决方案

步骤1:标准化账户编号

先统一Acc num的格式,提取核心数字部分,确保同账户条目能被正确分组:

import pandas as pd

# 构造初始数据
df = pd.DataFrame({
    'Acc num': ['100250--', '100250', '100250', '100250', '200100', '200100', '200100', '200100'],
    'Bank name': [pd.NA, pd.NA, pd.NA, 'SBI', pd.NA, pd.NA, 'ICICI', pd.NA]
})

# 清理账户编号:移除所有非数字字符
df['Acc num cleaned'] = df['Acc num'].str.replace(r'\D', '', regex=True)

步骤2:分组填充NaN

按清理后的账户编号分组,用组内非空值填充所有NaN:

# 分组后先向前填充、再向后填充,覆盖所有空白
df['Bank name'] = df.groupby('Acc num cleaned')['Bank name'].transform(lambda x: x.ffill().bfill())

# 可选:删除临时清理列
df = df.drop('Acc num cleaned', axis=1)

验证结果

执行代码后打印输出:

print(df)

得到结果:

Acc num Bank name
0  100250--       SBI
1    100250       SBI
2    100250       SBI
3    100250       SBI
4    200100     ICICI
5    200100     ICICI
6    200100     ICICI
7    200100     ICICI

补充说明

  • 若账户编号格式完全统一,可跳过清理步骤,直接按原始Acc num分组填充。
  • ffill().bfill()组合能确保不管非空值在组内的哪个位置,所有NaN都会被覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:39