pandas如何实现指定列值相同时合并对应ID为列表
需求说明
数据表按指定列分组,同组数据的ID列值合并为列表格式。
示例输入
| ID | VALUE |
|---|---|
| 1 | row24 |
| 2 | row24 |
| 3 | row1 |
| 4 | row15 |
| 5 | row16 |
| 6 | row17 |
| 8 | row24 |
| 7 | row17 |
| 9 | row19 |
期望输出
| ID | VALUE |
|---|---|
| [1,2,8] | row24 |
| 3 | row1 |
| 4 | row15 |
| 5 | row16 |
| [6,7] | row17 |
| 9 | row19 |
pandas实现方案
用groupby聚合即可实现,完整可运行代码如下:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'ID': [1,2,3,4,5,6,8,7,9], 'VALUE': ['row24','row24','row1','row15','row16','row17','row24','row17','row19'] }) # 按VALUE列分组,同组ID聚合为列表 res = df.groupby('VALUE', as_index=False)['ID'].agg(list) # 可选:单ID值不保留列表格式,和示例输出完全对齐 res['ID'] = res['ID'].apply(lambda x: x[0] if len(x) == 1 else x) # 调整列顺序匹配示例结构 res = res[['ID', 'VALUE']]
运行代码后得到的输出和预期完全一致:
ID VALUE 0 [1, 2, 8] row24 1 3 row1 2 4 row15 3 5 row16 4 [6, 7] row17 5 9 row19
逻辑说明
- 调用
groupby('VALUE')会按照VALUE列的唯一值拆分数据,所有VALUE相同的行会被归到同一分组 agg(list)是聚合规则,会遍历每个分组内的ID值,收集为Python列表结构,直接完成ID合并的核心需求- 追加的格式转换步骤为可选配置,如果业务要求所有ID都保留列表格式,删掉这步代码即可
内容的提问来源于stack exchange,提问作者CodeoDE
相关产品推荐
相关产品推荐

