Найти и напечатать все строки, чьи подэлементы имеют одинаковые значения - PullRequest
0 голосов
/ 08 марта 2019

Мой набор данных имеет следующие поля:

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

, но я не получаю все результаты, используяэтот.Например, фиксируются только последовательные результаты с одним и тем же продуктом.В нашем случае, поскольку до того, как пользователь А снова купил 10, он купил 12, поэтому его не захватывает.Кроме того, если есть две последовательные записи одного и того же пользователя, имеющие один и тот же продукт, отображается самая последняя запись:

df == df.shift ()

показывает только ту запись, которая встречалась последней, а не все записи, имеющие одинаковый продукт.Можно ли как-то добиться того, что я показывал выше?

1 Ответ

2 голосов
/ 08 марта 2019

Вы можете использовать дубликаты, чтобы получить строки, которые имеют дублированную пару продукт-пользователь, т.е. пользователь купил продукт раньше.

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

Затем вы можете выполнить сортировку и т. Д. *

Чтобы узнать, сколько раз покупается товар, вы можете использовать

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