如何从数据框中的两列创建列表字典

Dav*_*man 2 python dictionary list

我有一个这样的数据框

df = pd.DataFrame(columns = ['A', 'B'])
df.A = [1,1,1,2,2,2,2,4,4,5]
df.B = [5,2,4,3,1,5,4,1,2,2]
Run Code Online (Sandbox Code Playgroud)

我目前正在使用什么

d = {}
for i in df.A:
    d[i] = []
    for v in df.A[df.A == i].index:
        d[i].append(df.B[v])
Run Code Online (Sandbox Code Playgroud)

导致

{1: [5, 2, 4], 2: [3, 1, 5, 4], 4: [1, 2], 5: [2]}
Run Code Online (Sandbox Code Playgroud)

但这很慢。

这样做的pythonic方法是什么?

编辑:

d = {}
for i in df.A.unique():
    d[i] = df[df.A == i].B.tolist()
Run Code Online (Sandbox Code Playgroud)

似乎仍然必须有一个更快的方法

谢谢你的帮助!

Jon*_*nts 7

您可以使用DataFrame groupbyto_dict方法来将所有繁重的工作保留在熊猫中,而不是Python循环中,例如:

import pandas as pd
?
df = pd.DataFrame(columns = ['A', 'B'])
df.A = [1,1,1,2,2,2,2,4,4,5]
df.B = [5,2,4,3,1,5,4,1,2,2]
?
d = df.groupby('A')['B'].apply(list).to_dict()
Run Code Online (Sandbox Code Playgroud)

给你:

{1: [5, 2, 4], 2: [3, 1, 5, 4], 4: [1, 2], 5: [2]}
Run Code Online (Sandbox Code Playgroud)


小智 3

看看广告:每个键有多个值的列表到字典转换?

from collections import defaultdict
d = defaultdict(list)
for i, j in zip(df.A,df.B):
    d[i].append(j)
Run Code Online (Sandbox Code Playgroud)

如果这样可以吗?

编辑: 如果需要,您可以将其转换为简单的字典:

d = dict(d)
Run Code Online (Sandbox Code Playgroud)