2017-06-23 66 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}