pandas将dataframe id列转换为字典,并将相应的列转换为列表

问题描述 投票:1回答:4

我想将我的数据帧转换为一个字典,其中键将是一个id列。我想将具有相应id的所有相应的第二列值放入列表中。

示例数据:

s1 = pd.Series(['A','A','B'],name = 's1')
s2 = pd.Series(['1','2','2'],name = 's2')

df = pd.concat([s1,s2],axis = 1)

s1 s2
A  1
A  2
B  2

我想要的输出

如何获得带有映射的字典:

d = {'A':[1,2],'B':[2]}
python pandas
4个回答
2
投票

还有两个选择

df.groupby('s1').s2.apply(list).to_dict()
Out[44]: {'A': ['1', '2'], 'B': ['2']}

s=df.groupby('s1').s2.apply(list)
dict(zip(s.index,s))
Out[48]: {'A': ['1', '2'], 'B': ['2']}

2
投票

如果你想使用熊猫:

df.groupby("s1").s2.apply(lambda s:s.tolist()).to_dict()

但我认为defaultdict是正确的方法:

from collections import defaultdict

s1 = ['A','A','B']
s2 = ['1','2','2']

d = defaultdict(list)
for k, v in zip(s1, s2):
    d[k].append(v)

1
投票

结账熊猫groupBy functionality

{k: list(s.values) for (k, s) in df.groupby('s1')['s2']}

回报

{'A': [1, 2], 'B': [2]}

1
投票

我总是想提出defaultdict解决方案

from collections import defaultdict

d = defaultdict(list)

for k, v in zip(s1, s2):
    d[k].append(v)

dict(d)

{'A': ['1', '2'], 'B': ['2']}
© www.soinside.com 2019 - 2024. All rights reserved.