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

Python中同DataFrame内关联ConfigID行的空值填充方法

实现DataFrame同组空值行的数值填充(按ConfigID前缀分组)

当然可以实现,核心思路是先按ConfigID的前缀(去掉末尾的B/G)分组,再将组内非空值填充到同组的空值行中,具体步骤和代码如下:

原始数据与需求回顾

你提供的原始DataFrame中,每个ConfigID前缀对应两行(后缀B/G),其中一行有完整数据,另一行除ConfigID和Duration外均为空值,需要将有值行的数据复制到同组的空值行,得到目标DataFrame。

解决方案代码

import pandas as pd

# 原始数据
dataFrame_Original = pd.DataFrame(
   {
      "Region": ['1701656754', '', '1601656754', ''],
      "Directory": [153623, '', 153623, ''],
      "MigrDate": ['20221213', '', '20221214', ''],
      "MigrFrm": ['NBD Wty, Contract', '', 'Orlando, Contract', ''],
      "MigrTo": ['AMK1', '', 'AMK2', ''],
      "MemID": ['FI00', '', 'FI08', ''],
      "Ponts": ['854621544', '', '521354662', ''],
      "Eroom": ['FINNISH POST TIME DE', '', 'English Pre Dent', ''],
      "ConfigID": ['84460001B', '84460001G', '34460001B', '34460001G'],
      "Duration": ['AM02', 'AMK1', 'AUM02', 'AUMK1']
    }
)

# 1. 将空字符串转为pandas可识别的缺失值pd.NA
df = dataFrame_Original.replace('', pd.NA)

# 2. 生成分组键:提取ConfigID去掉最后一位(区分B/G组)
df['GroupID'] = df['ConfigID'].str[:-1]

# 3. 对需要填充的列(排除ConfigID、Duration、GroupID)按组填充
fill_columns = [col for col in df.columns if col not in ['ConfigID', 'Duration', 'GroupID']]
df[fill_columns] = df.groupby('GroupID')[fill_columns].transform(lambda x: x.ffill().bfill())

# 4. 清理临时列并将残留缺失值转回空字符串(可选,确保格式统一)
dataFrame_Result = df.drop('GroupID', axis=1).fillna('')

# 查看结果
print(dataFrame_Result)

代码说明

  • 缺失值转换:把原始数据中的空字符串转为pd.NA,让pandas的填充函数能正确识别缺失值;
  • 分组逻辑:通过str[:-1]提取ConfigID的前缀,将后缀为B和G的行归为同一组;
  • 组内填充:使用groupby.transform结合ffill()和bfill(),确保组内无论哪一行有值,都能填充到同组的空值行;
  • 格式还原:最后删除临时分组列,将可能残留的缺失值转回空字符串,保持与原始数据格式一致。

结果对比

运行代码后得到的dataFrame_Result与你提供的dataFrame_Expected完全一致,也可通过下图直观对比:

DataFrame示例对比图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 12:51:36