根据 groupby 条件过滤前 n 行

我有一个包含 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 数据框帮助该组并在每个组中选择最新的来做到这一点


我期望的输出是:


   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


白猪掌柜的
浏览 123回答 1
1回答

富国沪深

想法是首先删除重复项DataFrame.drop_duplicates,获取每组和DataFrame.merge原始数据帧的top2 值: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       date0             T1      U1      P1 2019-03-271             T1      U1      P2 2019-03-272             T1      U1      P3 2019-03-273             T2      U1      P2 2019-03-214             T2      U1      P3 2019-03-21
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python