python通过多个键对dict进行分组

2024-03-28 22:13:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的口述清单:

    my_list = [{
        "name": "alin",
        "id": 2,
        "note": -10
    },{
        "name": "alin",
        "id": 2,
        "note": -10
    },{
        "name": "alin",
        "id": 2,
        "note": -10
    },{
        "name": "milanie",
        "id": 3,
        "note": 11
    },{
        "name": "martin",
        "id": 3,
        "note": 11}]

我想按事件对它们进行分组,我已经这样做了:

my_list = [{
        "name": "alin",
        "id": 2,
        "note": -10,
        "occ": 3
    },
    },{
        "name": "milanie",
        "id": 3,
        "note": 11
    },{
        "name": "martin",
        "id": 3,
        "note": 11}]

我的问题是,他如何根据id和注释进行分组,并获得一个这样的dict:

{ "name": "martin",
  "id": 3,
  "note": 11,
  "occ":2}

Tags: nameidmy事件dictlistnotemartin
1条回答
网友
1楼 · 发布于 2024-03-28 22:13:54

你可以很容易地在熊猫身上做到这一点

import pandas as pd
my_list = [{
    "name": "alin",
    "id": 2,
    "note": -10
},{
    "name": "alin",
    "id": 2,
    "note": -10
},{
    "name": "alin",
    "id": 2,
    "note": -10
},{
    "name": "milanie",
    "id": 3,
    "note": 11
},{
    "name": "martin",
    "id": 3,
    "note": 11}]

pd.DataFrame(my_list).groupby(['name','id','note']).size().reset_index(name='occ').to_dict('records')

输出

[{'name': 'alin', 'id': 2, 'note': -10, 'occ': 3},
 {'name': 'martin', 'id': 3, 'note': 11, 'occ': 1},
 {'name': 'milanie', 'id': 3, 'note': 11, 'occ': 1}]

编辑:

根据您的需求,您可以使用命名agg显式定义列和聚合。在本例中,我们将使用每个组的last名称来获取martin,但是如果需要,您可以使用first来获取melanie。如果您想要一个特定的名称,您可能希望首先按名称对值进行排序,以保证得到的名称

pd.DataFrame(my_list).groupby(['id','note']).agg(name=('name','last'),occ=('id','count')).reset_index().to_dict('records')

输出

[{'id': 2, 'note': -10, 'name': 'alin', 'occ': 3},
 {'id': 3, 'note': 11, 'name': 'martin', 'occ': 2}]

相关问题 更多 >