首页 > 解决方案 > 如何将 pandas DataFrame 压缩到具有唯一键和列出值的字典中?

问题描述

我有以下示例 pandas DataFrame,其中有两列,Name并且Age

import pandas as pd

data = [['Alex',10],['Bob',12],['Barbara',25], ['Bob',72], 
    ['Clarke',13], ['Clarke',13], ['Destiny', 45]]

df = pd.DataFrame(data,columns=['Name','Age'], dtype=float)

print(df)
      Name   Age
0     Alex  10.0
1      Bob  12.0
2  Barbara  25.0
3      Bob  72.0
4   Clarke  13.0
5   Clarke  13.0
6  Destiny  45.0

我的最终目标是创建一个字典,其中每个键是名称,每个值是Ages与之关联的列表Name

所以,结束字典将是

final_result = {"Alex":[10], "Bob":[12, 72], "Barbara":[25], "Clarke":[13], "Destiny":[45]} 

我的做法:

我可以尝试遍历数据框以创建列表,并重命名该列:

for name in df.Name.unique():
    list_attributes = []
    for i in df.loc[df.Age == name].Age.unique()
        list_attributes.append(i)
    df['List_Column'] = list_attributes

但这非常令人费解。最有效的方法是什么?

标签: pythonpandaslist

解决方案


选项 1 : groupby().apply(list):

df.groupby('Name')['Age'].apply(list).to_dict()
# 4.06 ms ± 966 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

选项 2:列表/字典理解

{a:list(x) for a,x in df.groupby('Name')['Age']}
# 2.68 ms ± 177 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

输出:

{'Alex': [10.0],
 'Barbara': [25.0],
 'Bob': [12.0, 72.0],
 'Clarke': [13.0, 13.0],
 'Destiny': [45.0]}

推荐阅读