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

如何用Pandas GroupBy按ID聚合C1、C2列的值为列表?

Pandas按ID分组合并多列值为去重列表的最优方法

原始数据构造

先还原问题中的DataFrame:

import pandas as pd

df = pd.DataFrame({
    'ID': [1, 1, 2, 1],
    'C1': ['a', 'b', 'p', 'r'],
    'C2': ['b', 'e', 'a', 'a'],
    'C3': ['r', 'g', 'z', 'n'],
    'C4': ['q', 'h', 'p', 'm']
})

最优实现方法

根据需求(合并后去重并保留首次出现顺序),推荐两种高效方案:

方案1:堆叠列后聚合(大数据集首选)

通过melt将C1、C2列转为长格式,再按ID分组,用dict.fromkeys实现去重并保留顺序,这种方式依赖Pandas向量化操作,处理大数据集时效率更高:

# 提取目标列转长格式,分组后去重并转为列表
out = df[['ID', 'C1', 'C2']].melt(id_vars='ID')['value'].groupby(df['ID']).agg(lambda x: list(dict.fromkeys(x))).reset_index(name='l')

方案2:分组后直接合并去重(小数据集更直观)

直接按ID分组,合并C1、C2的列表后去重,代码逻辑清晰,小数据场景下使用更便捷:

# 分组后合并C1、C2列表,再去重保留顺序
out = df.groupby('ID').agg(
    l=lambda x: list(dict.fromkeys(x['C1'].tolist() + x['C2'].tolist()))
).reset_index()

最终输出

两种方案都能得到与需求一致的结果:

ID             l
0   1  [a, b, r, e]
1   2        [p, a]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:50:35