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

Pandas如何合并DataFrame中First Name相同的分散多行数据

Pandas 同标识多行非空属性合并为单行方案

针对同一First Name对应多行、每行仅存部分属性值、其余为空的数据集,按以下步骤处理即可得到单行单人员的规整结果:

  • 预处理空值:先将所有空白单元格、空字符串统一替换为Pandas可识别的NaN类型,否则聚合逻辑无法正确识别空值
  • 分组聚合:以First Name为分组键,对每个属性列取组内第一个非空值即可——由于每个人员的单个属性仅在一行存在有效值,其余行该字段均为空,该逻辑刚好能提取到所有有效属性

可直接运行的代码

import pandas as pd
import numpy as np

# 空值标准化:把空字符串、纯空格等无效空值替换为NaN
df1 = df1.replace(r'^\s*$', np.nan, regex=True)

# 分组聚合,取各列第一个非空值,保留First Name为普通列
clean_df = df1.groupby(by='First Name', as_index=False).first()

# 如果不需要原分散存储的行索引Index列,可以指定聚合列排除Index
# clean_df = df1.groupby(by='First Name', as_index=False)[['Age', 'Gender', 'Weight in lb', 'Height in cm']].first()

常见groupby失效原因

  1. 未做空值标准化:空单元格实际是空字符串、空格等非NaN值,聚合时被判定为有效值,无法跳过取到真实属性
  2. 聚合方法选择错误:误用sum()、count()等聚合逻辑,没有使用可自动跳过空值取有效条目的first()/last()方法

冲突校验(可选)

如果需要确认是否存在同一人员同一属性录入了多个不同值的异常,可以运行以下代码校验,返回结果所有值为1即代表无冲突,聚合结果准确:

# 统计每个人员每个属性的不同值数量
conflict_check = df1.groupby('First Name')[['Age', 'Gender', 'Weight in lb', 'Height in cm']].nunique()
print(conflict_check)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:39:18