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

在Pandas中按A、B、C列分组合并D列唯一值

按多列分组拼接指定列值的Pandas解决方案

问题背景

给定如下DataFrame:

import pandas as pd

df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
                         "bar", "bar", "bar", "bar","bar"],
                   "B": ["one", "one", "one", "two", "two",
                         "one", "one", "two", "two","two"],
                   "C": ["small", "large", "large", "small",
                         "small", "large", "small", "small",
                         "large", "large"],
                   "D": [1, 2, 3, 4, 5, 6, 7, 8, 9,99999]})

需要将A、B、C列值完全相同的行对应的D列值用逗号拼接,得到目标格式的DataFrame。

解决方法

使用groupby结合自定义聚合逻辑即可实现需求:

# 按A、B、C分组,拼接D列值(保留原始分组顺序)
result = df.groupby(['A', 'B', 'C'], sort=False)['D'].agg(lambda x: ','.join(map(str, x))).reset_index()

代码解释

  • groupby(['A', 'B', 'C'], sort=False):按A、B、C三列的唯一组合分组,sort=False确保结果行序和原始数据中分组出现的顺序一致
  • agg(lambda x: ','.join(map(str, x))):对每组的D列数据,先将每个数值转为字符串,再用逗号连接成一个字符串
  • reset_index():将分组后的索引转换为普通列,得到结构规整的DataFrame

输出结果

运行代码后得到的结果与目标格式完全一致:

A    B      C        D
0  foo  one  small        1
1  foo  one  large      2,3
2  foo  two  small      4,5
3  bar  one  large        6
4  bar  one  small        7
5  bar  two  small        8
6  bar  two  large    9,99999

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:25:23