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

如何基于ID合并Pandas DataFrame行并保留唯一值为列表

Pandas按ID合并行:同一ID下唯一值转列表、重复值保留单个

针对你的需求,这里给你一套适合新手的实现步骤,代码直接就能跑:

1. 先构造示例数据

先把你给的原始数据用Pandas创建出来,方便后续测试:

import pandas as pd
import numpy as np

# 原始数据对应转换为DataFrame
df = pd.DataFrame({
    'id': [1, 1, 2, 3, 3, 4, 4],
    'info1': ["'a'", "'b'", "'c'", "'d'", "'e'", "'f'", "'g'"],
    'info2': ['xxx', 'xxx', 'mmm', 'uuu', 'uuu', 'xy', 'xy'],
    'info3': ['yyy', 'yyy', 'nnn', np.nan, 'ooo', np.nan, np.nan],
    'info4': [np.nan] * 7
})

print("原始数据:")
print(df)

2. 定义核心聚合函数

这个函数负责处理每个分组内的列值:去重、过滤缺失值,然后根据唯一值的数量返回单个值或列表:

def agg_unique_values(series):
    # 先去掉缺失值,再提取唯一值
    unique_vals = series.dropna().unique()
    # 根据唯一值数量返回对应结果
    if len(unique_vals) == 0:
        return np.nan  # 没有有效数据就返回缺失值
    elif len(unique_vals) == 1:
        return unique_vals[0]  # 只有一个值就直接返回单个元素
    else:
        return list(unique_vals)  # 多个值就转成列表

3. 分组聚合得到结果

按id分组,把刚才的函数应用到所有列上:

# 按id分组,as_index=False让id保持为普通列
result_df = df.groupby('id', as_index=False).agg(agg_unique_values)

print("\n处理后结果:")
print(result_df)

最终效果

运行后得到的结果和你期望的完全一致:

  • id=1的info1变成["'a'", "'b'"],info2、info3因为值重复,保留单个xxx、yyy
  • id=3的info3原本有缺失和ooo,过滤缺失后只保留ooo
  • 所有缺失值的列(比如info4)保持NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:35:21