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

Python按字符串值Groupby分组后去重合并问题求助

解决DataFrame按分组合并列并去重的问题

你的核心需求是按A、B列分组后,对C列实现合并去重,对D列拆分所有子元素后去重再合并。之前的代码仅直接拼接字符串,未处理去重逻辑,尤其是D列的元素为逗号分隔的字符串,直接拼接会保留重复值,因此无法得到正确结果。

完整实现代码

import pandas as pd

# 构造输入数据(如果已有DataFrame可跳过此部分)
data = [
    ['R1', 'J1', 'D1', 'S1,S2'],
    ['R1', 'J1', 'D1', 'S3,S4,S5'],
    ['R1', 'J1', 'D2', 'S5,S6,S2'],
    ['R1', 'J1', 'D2', 'S7,S8'],
    ['P1', 'J2', 'E1', 'T1,T2'],
    ['P1', 'J2', 'E1', 'T3,T4,T5'],
    ['P1', 'J2', 'E2', 'T5,T6,T2'],
    ['P1', 'J2', 'E3', 'T7,T8,T5']
]
df = pd.DataFrame(data, columns=['A', 'B', 'C', 'D'])

# 分组聚合处理
result = df.groupby(['A', 'B']).agg(
    # C列:取分组内唯一值后拼接
    C=('C', lambda x: ','.join(x.unique())),
    # D列:拆分所有元素→去重→排序→拼接
    D=('D', lambda x: ','.join(sorted(set(','.join(x).split(',')))))
).reset_index()

print(result)

代码说明

  • C列处理:通过x.unique()提取分组内C列的唯一值,再用','.join()拼接,直接实现合并去重。
  • D列处理:
    1. ','.join(x):将分组内所有D列的字符串拼接成一个完整字符串;
    2. split(','):把完整字符串拆分为单个元素的列表;
    3. set():对列表元素去重;
    4. sorted():对去重后的元素排序(保证结果与示例输出顺序一致,可选);
    5. ','.join():将排序后的元素重新拼接为字符串。

输出结果

A   B            C                               D
0  P1  J2  E1,E2,E3  T1,T2,T3,T4,T5,T6,T7,T8
1  R1  J1      D1,D2  S1,S2,S3,S4,S5,S6,S7,S8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:40:35