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列处理:
','.join(x):将分组内所有D列的字符串拼接成一个完整字符串;split(','):把完整字符串拆分为单个元素的列表;set():对列表元素去重;sorted():对去重后的元素排序(保证结果与示例输出顺序一致,可选);','.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
相关产品推荐
相关产品推荐

