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

使用Pandas groupby按Unique_id聚合并生成去重的逗号分隔字段值

解决分组聚合合并唯一值的问题

你之前的代码问题出在聚合函数的用法上——'first'.join是错误的语法,而且first只会提取每组的第一个值,完全没法实现提取唯一值并合并的需求。下面是能满足你要求的正确实现:

正确代码示例

import pandas as pd

# 先构造你的数据集
data = {
    'Unique_id': [101, 102, 101, 102, 103, 102, 103, 101],
    'Name': ['ABC Ltd', 'JKL Ltd', 'ABC Ltd', 'JKL US', 'IHJ Ltd', 'JKL UK', 'IHJ US', 'ABC US'],
    'Product': ['A', 'B', 'B', 'B', 'A', 'C', 'A', 'A'],
    'Price': [100, 200, 200, 200, 100, 300, 100, 100]
}
df = pd.DataFrame(data)

# 核心分组聚合逻辑:提取每组唯一值并以逗号分隔
df_agg = df.groupby('Unique_id').agg(
    Name=('Name', lambda x: ', '.join(pd.Series(x).unique())),
    Product=('Product', lambda x: ', '.join(pd.Series(x).unique())),
    Price=('Price', lambda x: ', '.join(pd.Series(x).unique().astype(str)))
).reset_index()

print(df_agg)

代码逻辑说明

  • pd.Series(x).unique():先提取每组中的唯一值,避免重复内容被多次合并
  • ', '.join(...):把唯一值列表转换成逗号分隔的字符串格式
  • Price列需要用astype(str)转成字符串,因为join只能处理字符串类型的元素

输出说明

运行代码后会得到符合需求的结果:

Unique_idNameProductPrice
101ABC Ltd, ABC USA, B100
102JKL Ltd, JKL US, JKL UKB, C200, 300
103IHJ Ltd, IHJ USA100

注:你的期望输出中Unique_id=102的Price列写的是200,但原数据里该组存在200和300两个唯一Price值。如果确实需要只保留单个Price值,可以把Price的聚合逻辑改成lambda x: str(x.unique()[0])来取第一个唯一值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:27:43