Фильтрация верхних n строк в зависимости от состояния группы - PullRequest
1 голос
/ 27 марта 2019

У меня есть фрейм данных, который имеет 4 столбца User_id, Transaction_id, product и datetime. Для каждого пользователя я должен выбрать его верхнюю n недавнюю транзакцию. Предположим, что n = 2, Мой фрейм данных выглядит так:

    transaction_id  user_id  product  date
         T1             U1     P1     2019-03-27
         T1             U1     P2     2019-03-27
         T1             U1     P3     2019-03-27
         T2             U1     P2     2019-03-21
         T2             U1     P3     2019-03-21
         T3             U1     P2     2019-03-20

Я попытался сделать это, воспользовавшись помощью этой группы с помощью pandas dataframe и выбрав последнее в каждой группе

Что я ожидаю в качестве выхода:

   transaction_id   user_id  product  date
        T1            U1       P1     2019-03-27
        T1            U1       P2     2019-03-27
        T1            U1       P3     2019-03-27
        T2            U1       P2     2019-03-21
        T2            U1       P3     2019-03-21

1 Ответ

1 голос
/ 27 марта 2019

Идея состоит в том, чтобы сначала удалить дубликаты DataFrame.drop_duplicates, получить значения top2 для групп и DataFrame.merge исходный фрейм данных:

df = (df.merge(df.drop_duplicates(['user_id','date'])
                 .sort_values('date',ascending = False)
                 .groupby('user_id')
                 .head(2)[['user_id','date']])
       )
print (df)
  transaction_id user_id product       date
0             T1      U1      P1 2019-03-27
1             T1      U1      P2 2019-03-27
2             T1      U1      P3 2019-03-27
3             T2      U1      P2 2019-03-21
4             T2      U1      P3 2019-03-21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...