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

如何按ID合并DataFrame行并保留所有列(字符型数据)

按ID合并字符型DataFrame(保留原列结构)

针对你要按ID分组,将多行合并为一行且保留所有列的需求,核心逻辑是对每个分组内的列,只要存在YES就保留YES,否则留空,可以用Pandas的分组聚合实现:

步骤1:构造示例数据(和你的数据一致)

import pandas as pd

df = pd.DataFrame({
    'ID': ['A001', 'A001', 'A002', 'A002', 'A002', 'A003'],
    'thing_1': [pd.NA, 'YES', pd.NA, pd.NA, 'YES', pd.NA],
    'thing_2': ['YES', pd.NA, pd.NA, 'YES', pd.NA, 'YES'],
    'thing_3': [pd.NA, pd.NA, 'YES', pd.NA, 'YES', pd.NA]
})

步骤2:分组聚合实现需求

方法一:自定义聚合函数(通用型,适用于列有多种非空值的情况)

# 按ID分组,对每个列提取非空值,有值则取唯一有效值,无值则留NA
result = df.groupby('ID').agg(
    lambda x: x.dropna().unique()[0] if not x.dropna().empty else pd.NA
).reset_index()

方法二:用max()简化操作(仅适用于列只有YES和NA的场景)

因为Pandas对字符串列执行max()时会自动忽略NA,而YES是唯一的非空字符串,直接取最大值就能得到想要的结果:

result = df.groupby('ID').max().reset_index()

最终结果

执行后result的输出为:

IDthing_1thing_2thing_3
A001YESYES
A002YESYESYES
A003YES

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:05:29