【问题标题】:Find and print all the rows whose sub-elements have similar values查找并打印其子元素具有相似值的所有行
【发布时间】: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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我们还能查出该产品的购买次数吗?
  • 您可以使用groupby和count。上面更新了答案。
  • 是的,我想通了。
  • 谢谢蒂姆!这很有用
猜你喜欢
  • 2012-05-28
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2020-10-23
  • 1970-01-01
  • 2021-07-16
  • 2017-01-13
相关资源
最近更新 更多