python - 如何将 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
但这非常令人费解。最有效的方法是什么?
解决方案
选项 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]}
推荐阅读
- php - 在 wordpress 中使用用户元和元值搜索所有用户
- sql - T-SQL:找出之前发生的序列值
- javascript - React.js 将路径作为道具传递
- go - 如何正确传递数据库参考以进行事务使用
- javascript - 将对象数组转换为不同的对象数组 - Javascript/Angular
- verilog - reg [7:0] a [3:0] 和 reg [7:0] a [0:3] 有什么区别
- sql - 如何将表达式或逗号分隔的字符串拆分为 oracle 中的列名?
- node.js - Access-Control-Allow-Origin' 标头在节点中包含多个带有 websockets 的值
- image - 如何更改更改windows 10登录背景图片
- google-maps - 谷歌地图上多个动态位置的信息窗口未正确显示