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

时间:2018-03-02 01:45:32

标签: python pandas

我想将我的数据帧转换为一个字典,其中键将是一个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]}

4 个答案:

答案 0 :(得分:2)

如果你想使用pandas:

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 :(得分: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 :(得分:1)

Checkout Pandas groupBy functionality

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

返回

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

答案 3 :(得分: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']}