在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
相关产品推荐
相关产品推荐

