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

如何合并含相同唯一元素集合的DataFrame行并聚合数值列?

合并DataFrame中元素集合相同的行并聚合数值

问题场景

现有一个Python DataFrame,A列是逗号分隔的字符串,B列对应数值。需要合并那些字符串拆分后的**元素集合完全相同(不考虑顺序)**的行,并对B列的数值求和。

原DataFrame:

import pandas as pd
df = pd.DataFrame([['Organic Search, Direct', 171], ['Organic Search, Direct, Not Found', 3], ['Direct, Organic Search', 389], ['Direct, Organic Search, Not Found', 8]], columns=['A', 'B'])

期望结果:

df_result = pd.DataFrame([['Direct, Organic Search',560], ['Direct, Organic Search, Not Found',11]], columns = ['A','B'])

解决方法

你的思路完全可行——通过生成标准化的分组键来识别元素集合相同的行,具体实现如下:

  1. 对A列的每个字符串,拆分后按字母顺序排序,再重新拼接成统一格式的字符串,以此作为分组的唯一标识
  2. 按这个分组键对DataFrame分组,对B列求和
  3. 按需保留原始格式的A列或者使用标准化后的字符串作为结果的A列

代码实现(保留原始A列格式)

# 生成分组键:拆分字符串→排序→重新拼接
df['group_key'] = df['A'].apply(lambda x: ', '.join(sorted(x.split(', '))))

# 分组聚合:取每组第一个原始A值,对B列求和
result = df.groupby('group_key').agg(
    A=('A', 'first'),
    B=('B', 'sum')
).reset_index(drop=True)

print(result)

代码实现(使用标准化后的A列)

如果希望结果的A列是排序后的统一格式,直接用分组键作为A列即可:

result = df.groupby(df['A'].apply(lambda x: ', '.join(sorted(x.split(', ')))))['B'].sum().reset_index().rename(columns={'index': 'A'})

代码说明

  • x.split(', '):将逗号分隔的字符串拆分为元素列表
  • sorted():对列表按字母顺序排序,确保元素集合相同的字符串生成一致的分组键
  • ', '.join():将排序后的列表重新拼接为字符串,作为分组的唯一标识
  • groupby().agg():按分组键聚合,完成数值求和与列值提取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:10:24