【发布时间】:2019-07-30 21:00:59
【问题描述】:
我的数据集有以下字段:
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
等等。
我试过像这样使用 shift 函数
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()
只显示最后遇到的记录,而不是所有具有相同产品的记录。 有什么办法可以实现我上面显示的吗?
【问题讨论】:
-
使用 groupby 怎么样?你可以调用 groupby(['Time','User','Product'])
标签: python pandas algorithm numpy data-cleaning