Мой набор данных имеет следующие поля:
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 ()
показывает только ту запись, которая встречалась последней, а не все записи, имеющие одинаковый продукт.Можно ли как-то добиться того, что я показывал выше?