我有一个熊猫数据框df
,列user
和product
。它描述了哪个用户购买了哪些产品,并考虑了重复购买同一产品的情况。例如,如果用户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] 删除。
我来说两句