#python #pandas #algorithm #numpy #data-cleaning
#python #pandas #алгоритм #numpy #очистка данных
Вопрос:
Мой набор данных содержит следующие поля:
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())amp;(df.productBought==df.productBought.shift()]
но я не получаю все результаты, используя это. Например, фиксируются только последовательные результаты, которые имеют одинаковый продукт. В нашем случае, поскольку до того, как пользователь A снова купил 10, он купил 12, поэтому это не фиксируется.
Кроме того, если есть две последовательные записи одного и того же пользователя, имеющего один и тот же продукт, отображается последняя из них, как
df==df.shift()
отображается только запись, которая была обнаружена последней, а не все записи, которые имеют одинаковый продукт. Есть ли какой-либо способ добиться того, что я показал выше?
Комментарии:
1. Как насчет использования groupby? Вы могли бы вызвать groupby([‘Time’,’User’, ’Product’])
Ответ №1:
Вы можете использовать duplicated для получения строк, в которых дублируется пара product-user, т. е. пользователь покупал продукт раньше.
df2 = df[df.duplicated(['Product', 'User'], keep=False)]
Затем вы можете выполнить сортировку и т.д…
Чтобы узнать, сколько раз покупаются продукты, вы можете использовать
df2.groupby(['Product', 'User']).count()
Комментарии:
1. можем ли мы также узнать, сколько раз был куплен продукт?
2. Вы можете использовать groupby и count. Ответ обновлен выше.
3. Да, я понял это.
4. Спасибо, Тим! Это было полезно