DataFrame迭代处理问询:两关联列左列同值不重复场景的填充方法
类合并单元格稀疏DataFrame的处理方案
这类数据是Excel合并单元格导出后常见的存储格式,左列仅在取值变更时写入,同组后续行留空,处理的核心是将左列空值用同组的有效值补全,再进行后续迭代、分组操作。
步骤1:空值标准化
首先要确保左列的空白单元格被识别为pandas可处理的空值,避免空白字符串、空格等无法被填充逻辑识别:
import pandas as pd import numpy as np # 替换左列中所有全空白内容为NaN,示例中左列是姓名列,可替换为实际列名 df["姓名"] = df["姓名"].replace(r'^\s*$', np.nan, regex=True)
步骤2:向下填充同组有效值
用pandas内置的ffill()(向前填充)方法,直接用最近的非空值填充后续的空行:
# 向下填充左列空值 df["姓名"] = df["姓名"].ffill()
填充后每一行都会带有对应的左列取值,无需再在迭代时手动记录上一个非空值。
填充前后效果对比:
填充前姓名 详细信息 填充后姓名 张三 年龄:25 张三 NaN 部门:技术部 张三 NaN 入职:2023 张三 李四 年龄:30 李四 NaN 部门:产品部 李四
步骤3:迭代处理关联数据
填充完成后可以直接按左列分组迭代,处理同一分组的所有右列关联信息:
# sort=False保留原始数据的出现顺序,避免分组后顺序打乱 for name, detail_group in df.groupby("姓名", sort=False): # 取出当前姓名对应的所有详细信息 details = detail_group["详细信息"].tolist() # 此处写入自定义业务处理逻辑 print(f"{name}的信息:{details}")
注意事项
- 填充前需要确认左列第一行是非空值,否则开头的空值会保留无法被填充
- 如果部分左列空值属于真实缺失而非合并单元格导致的留空,需要先给这部分行手动打标记、填充指定值后再执行全局
ffill(),避免错误覆盖
内容的提问来源于stack exchange,提问作者Tiange Hou
相关产品推荐
相关产品推荐

