如何按DataFrame中duplicated列的不同值分组存储为列表?
按duplicated列拆分DataFrame为字典列表的实现方案
原始DataFrame结构
| id | country | city | amount | duplicated |
|---|---|---|---|---|
| 1 | France | Paris | 200 | 1 |
| 2 | France | Paris | 200 | 1 |
| 3 | France | Lyon | 50 | 2 |
| 4 | France | Lyon | 50 | 2 |
| 5 | France | Lyon | 50 | 2 |
需求说明
需要根据duplicated列的不同取值,将对应行转换为字典组成的列表,每个取值对应一个独立列表。
问题分析
你之前使用的df[df.duplicated(['country','city','amount', 'duplicated'], keep = False)]无法实现需求,因为所有行在指定列组合下都属于重复组的成员,所以返回的是整个原DataFrame,这不是分组拆分的逻辑。
实现代码
直接通过groupby按duplicated列分组,再将每组转换为字典列表:
# 分组并转换为字典列表的字典 grouped_lists = df.groupby('duplicated')[['id', 'country', 'city', 'amount']].apply(lambda x: x.to_dict('records')).to_dict() # 获取对应分组的列表 list_1 = grouped_lists[1] list_2 = grouped_lists[2]
输出结果
list_1
[ { "id": 1, "country": "France", "city": "Paris", "amount": 200 }, { "id": 2, "country": "France", "city": "Paris", "amount": 200 } ]
list_2
[ { "id": 3, "country": "France", "city": "Lyon", "amount": 50 }, { "id": 4, "country": "France", "city": "Lyon", "amount": 50 }, { "id": 5, "country": "France", "city": "Lyon", "amount": 50 } ]
补充说明
如果duplicated列的取值不确定或较多,可以遍历grouped_lists字典来批量处理所有分组,无需手动提取每个列表。
内容的提问来源于stack exchange,提问作者Taco22
相关产品推荐
相关产品推荐

