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

时间:2019-03-08 19:30:27

标签: python pandas algorithm numpy data-cleaning

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

然后,您可以进行排序等...

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

df2.groupby(['Product', 'User']).count()