2016-06-07 16 views
4

字典我有一个熊猫数据帧:熊猫GROUPBY两列然后得到的值

banned_titles = 
TitleId RelatedTitleId 
0 89989   32598 
1 89989   3085083 
2 95281   3085083 

当我申请GROUPBY如下

In [84]: banned_titles.groupby('TitleId').groups 
Out[84]: {89989: [0, 1], 95281: [2]} 

这是如此接近,但不是我想要的。

我要的是:

{89989: [32598, 3085083], 95281: [3085083]} 

有没有办法做到这一点?

回答

13

试试这个:

In [8]: x.groupby('TitleId')['RelatedTitleId'].apply(lambda x: x.tolist()).to_dict() 
Out[8]: {89989: [32598, 3085083], 95281: [3085083]} 

或一系列列表:

In [10]: x.groupby('TitleId')['RelatedTitleId'].apply(lambda x: x.tolist()) 
Out[10]: 
TitleId 
89989 [32598, 3085083] 
95281   [3085083] 
Name: RelatedTitleId, dtype: object 

数据:

In [9]: x 
Out[9]: 
    TitleId RelatedTitleId 
0 89989   32598 
1 89989   3085083 
2 95281   3085083 
+0

甜!正是我想要的,闪电般的快速反应。 Дякую! –

+0

@BediE,非常欢迎您(будьласка)! :) – MaxU

4

尝试列表中的一个线(无拉姆达):

dict(df.groupby('TitleId')['RelatedTitleId'].apply(list)) 
# {89989: [32598, 3085083], 95281: [3085083]} 
+0

不幸的是,我相信这不再适用于熊猫21 –

+0

你知道如何将DataFrame中的键名保存到字典吗? – mousomer