我的数据集有以下字段:
User Product Time
A 10 10-JAN
B 14 10-JAN
C 20 10-JAN
A 12 10-JAN
B 12 11-JAN
A 10 12-JAN
D 08 12-JAN
A 13 12-JAN
B 14 13-JAN
C 20 13-JAN
A 12 14-JAN
C 21 14-JAN
A 10 15-JAN
诸若此类
我想拿出来,只显示那些用户曾经购买过类似的产品,与购买时间戳。所以就像这样:
ProductBought User Time count
10 A 10-JAN 3
10 A 12-JAN 3
10 A 15-JAN 3
12 A 10-JAN 2
12 A 14-JAN 2
14 B 10-JAN 2
14 B 13-JAN 2
20 C 10-JAN 2
20 C 13-JAN 2
诸若此类。
我试过像这样使用移位功能
df.sort_values(by=['User','Time'],ascending=True)
df[(df.User==df.User.shift())&(df.productBought==df.productBought.shift()]
但我不能用这个得到所有的结果。例如,只捕获具有相同产品的连续结果。在我们的例子中,因为在用户A再次购买10之前,它购买了12,所以它没有捕捉到这一点。此外,如果同一用户的两个连续记录具有相同的产品,则将显示最新的记录,如
df==df.shift()
只显示最后遇到的记录,而不是所有具有相同产品的记录。有什么方法可以达到我上面所展示的吗?
发布于 2019-03-08 11:36:34
您可以使用复制获得具有复制产品-用户对的行,即用户以前购买过该产品。
df2 = df[df.duplicated(['Product', 'User'], keep=False)]
然后,你可以做排序等等..。
要了解这些产品被购买了多少次,您可以使用
df2.groupby(['Product', 'User']).count()
https://stackoverflow.com/questions/55069814
复制相似问题