2017-07-14 57 views
1

我有一个熊猫数据框df,列userproduct。它描述了哪个用户购买哪些产品,占同一产品的重复购买量。例如。如果用户1购买产品23三次,则df将包含用户1三次的条目23. 对于每个用户,我只对那些由该用户购买三次以上的产品感兴趣。因此,我做s = df.groupby('user').product.value_counts(),然后我过滤s = s[s>2],以放弃不经常购买的产品。然后,s看起来是这样的:pandas:来自groupby.value_counts()的字词

user  product 
3  39190   9 
     47766   8 
     21903   8 
6  21903   5 
     38293   5 
11  8309   7 
     27959   7 
     14947   5 
     35948   4 
     8670   4 

已经过滤的数据,我不感兴趣的频率(右列)了。

如何根据s创建一个形式为user:product的字典?我无法访问系列的各个列/索引。

回答

1

选项0

s.reset_index().groupby('user').product.apply(list).to_dict() 

{3: [39190, 47766, 21903], 
6: [21903, 38293], 
11: [8309, 27959, 14947, 35948, 8670]} 

选项1

s.groupby(level='user').apply(lambda x: x.loc[x.name].index.tolist()).to_dict() 

{3: [39190, 47766, 21903], 
6: [21903, 38293], 
11: [8309, 27959, 14947, 35948, 8670]} 

选项2

from collections import defaultdict 

d = defaultdict(list) 

[d[x].append(y) for x, y in s.index.values]; 

dict(d) 

{3: [39190, 47766, 21903], 
6: [21903, 38293], 
11: [8309, 27959, 14947, 35948, 8670]} 
+0

谢谢,解决了!在选项0中,我不得不在reset_index()中提供一个新的列名,否则我会得到一个命名错误(与[这里描述的一样(https://stackoverflow.com/questions/39778686/pandas-reset-index-after- GROUPBY,价值数))。 – DominikS

相关问题