2017-06-23 44 views
2

我有一个数据帧熊猫据帧与dict上多列和值列出

id key 
a1  1 
a2  1 
a3  1 
a4  2 
a5  2 
a6  3 

我想创建一个字典,key机器没有了,id列清单

,如:

{1: ['a1', 'a2', 'a3'], 2: ['a4', 'a5'], 3: ['a6']} 

我可以先使用groupby然后做.to_dict吗?

回答

2

我相信你需要列出的dict广告值 - 使用groupby + apply + to_dict

d = df.groupby('key')['id'].apply(list).to_dict() 
print (d) 
{1: ['a1', 'a2', 'a3'], 2: ['a4', 'a5'], 3: ['a6']} 

或者,如果需要list与标量增加if/elseapply

d = df.groupby('key')['id'].apply(lambda x: list(x) if len(x) > 1 else x.iat[0]).to_dict() 
print (d) 
{1: ['a1', 'a2', 'a3'], 2: ['a4', 'a5'], 3: 'a6'} 
+0

这很好,如果我们有一列,但是,如果我们必须从多列中获取值呢?我遇到过类似的情况。我尝试过使用这个,但没有成功。我认为'地图'会做到这一点,但不知道!如果你愿意,我在这里发布了一个问题:https://stackoverflow.com/questions/46623452/map-two-data-frames-to-create-a-dictionary-with-multiple-values-for-a-key -pand –

1

使用字典解析围绕groupby迭代器

{n: v.tolist() for n, v in df.groupby('key').id}