查找并打印其子元素具有相似值的所有行

问题描述 投票:0回答:1

我的数据集包含以下字段:

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()

仅显示最后遇到的记录,而不是所有具有相同产品的记录。有什么方法可以实现我上面显示的内容吗?

python pandas algorithm numpy data-cleaning
1个回答
2
投票

您可以使用duplicated来获取具有重复产品 - 用户对的行,即用户之前购买过该产品。

df2 = df[df.duplicated(['Product', 'User'], keep=False)]

然后,你可以做排序等...

要了解产品的购买次数,您可以使用

df2.groupby(['Product', 'User']).count()
© www.soinside.com 2019 - 2024. All rights reserved.