熊猫:来自groupby.value_counts()的字典

多米尼克

我有一个熊猫数据框df,列userproduct它描述了哪个用户购买了哪些产品,并考虑了重复购买同一产品的情况。例如,如果用户1购买了3次产品23,则用户1df将包含3次输入23。对于每个用户,我只对由该用户购买3次以上的产品感兴趣。因此,我这样做s = df.groupby('user').product.value_counts(),然后进行过滤s = s[s>2],以丢弃购买频率不够高的产品。然后,s看起来像这样:

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

过滤数据后,我对频率(右列)不再感兴趣。

如何创建user:product基于的形式的字典s我在访问系列的各个列/索引时遇到麻烦。

海盗

选项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]}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章