Pandas如何结合groupby与apply同时实现分组计数与列值合并
实现方案
你可以直接使用Pandas分组对象的agg()方法一次性完成多个聚合操作,无需分开计算后再合并,完整可运行代码如下:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'colA': ['name1', 'name2', 'name2', 'name4', 'name2', 'name5', 'name5'], 'colB': ['red', 'yellow', 'yellow', 'black', 'yellow', 'green', 'blue'] }) # 单次分组完成两个聚合需求 result = df.groupby('colA', as_index=False).agg( Color=('colB', lambda x: ','.join(x)), Count_grouped_A=('colB', 'count') )
执行后得到的result就是你需要的合并结果:
| colA | Color | Count_grouped_A |
|---|---|---|
| name1 | red | 1 |
| name2 | yellow,yellow,yellow | 3 |
| name4 | black | 1 |
| name5 | green,blue | 2 |
补充说明
- 上述写法使用了Pandas的命名聚合语法,要求Pandas版本≥0.25.0。如果你使用的是更早的版本,可以使用兼容写法:
result = df.groupby('colA')['colB'].agg([lambda x: ','.join(x), 'count']).reset_index() # 自定义列名 result.columns = ['colA', 'Color', 'Count grouped A']
- 你之前的拼接代码存在变量名不匹配的问题:
lambda lists: ','.join(color)中lambda参数是lists,但join方法里调用的是未定义的color,修改为相同变量名即可正常运行。
内容的提问来源于stack exchange,提问作者plategt
相关产品推荐
相关产品推荐

