如何按cat2列合并DataFrame多行,实现多类型列的差异化聚合
Pandas按指定列分组合并DataFrame解决方案
原始DataFrame
| cat0 | cat1 | cat2 | col_list | Quantity | | ----- | ---- | ---- | ----------| -------- | | alpha | x | a | [a,b,c,d] | 4 | | alpha | y | a | [e] | 1 | | beta | z | a | [f,g] | 2 | | gamma | p | b | [h] | 1 | | gamma | q | b | [I,j,k,l] | 4 | | phi | r | c | [r,s] | 2 | | eita | s | c | [m,n] | 2 |
实现代码
import pandas as pd # 构造原始数据 data = { 'cat0': ['alpha', 'alpha', 'beta', 'gamma', 'gamma', 'phi', 'eita'], 'cat1': ['x', 'y', 'z', 'p', 'q', 'r', 's'], 'cat2': ['a', 'a', 'a', 'b', 'b', 'c', 'c'], 'col_list': [['a','b','c','d'], ['e'], ['f','g'], ['h'], ['I','j','k','l'], ['r','s'], ['m','n']], 'Quantity': [4, 1, 2, 1, 4, 2, 2] } df = pd.DataFrame(data) # 定义分组聚合规则 agg_rules = { 'cat0': lambda x: ','.join(x.unique()), 'cat1': lambda x: ','.join(x.unique()), 'col_list': lambda x: [item for sublist in x for item in sublist], 'Quantity': 'sum' } # 按cat2分组并聚合 result_df = df.groupby('cat2', as_index=False).agg(agg_rules) print(result_df)
运行结果
| cat0 | cat1 | cat2 | col_list | Quantity | | ---------- | ----- | ---- | ----------------| -------- | | alpha,beta | x,y,z | a | [a,b,c,d,e,f,g] | 7 | | gamma | p,q | b | [h,I,j,k,l] | 5 | | phi,eita | r,s | c | [r,s,m,n] | 4 |
规则说明
- 字符串列
cat0、cat1:先去重再用逗号拼接,避免同一分组内出现重复值 - 列表列
col_list:通过列表推导式将所有子列表的元素合并为单个大列表 - 整数列
Quantity:直接对分组内的数值求和
内容的提问来源于stack exchange,提问作者trojan horse
相关产品推荐
相关产品推荐

