首页 > 解决方案 > 如何在熊猫数据框组中创建订单?

问题描述

我有数据数据框,我想在其中添加列,该列将分别指示每个 user_id 的日期顺序,所以它就像在表 2 中一样。

表格1:

user_id         received_at          action    
0043e1a6-52e4   2018-01-05 12:32:10  A                 
                2018-01-05 12:33:13  A                 
                2018-01-05 12:42:12  B                 
0070f782-29f4   2018-01-06 01:41:18  A                 
                2018-01-06 01:42:12  A                 
                2018-01-06 01:43:11  B                 
                2018-01-06 01:44:18  C                               
008aa58a-84a5   2018-01-06 14:22:13  A                 
                2018-01-06 14:23:18  A                 
                2018-01-06 14:24:13  A                 
                2018-01-06 14:25:18  C 

像这样

表 2:

user_id         received_at          action  order_n 
0043e1a6-52e4   2018-01-05 12:32:10  A       1               
                2018-01-05 12:33:13  A       2               
                2018-01-05 12:42:12  B       3               
0070f782-29f4   2018-01-06 01:41:18  A       1               
                2018-01-06 01:42:12  A       2               
                2018-01-06 01:43:11  B       3               
                2018-01-06 01:44:18  C       4                             
008aa58a-84a5   2018-01-06 14:22:13  A       1               
                2018-01-06 14:23:18  A       2               
                2018-01-06 14:24:13  A       3               
                2018-01-06 14:25:18  C       4  

是否有比单独为每个 user_id 进行迭代更有效且可能更简单的解决方案?

标签: pythonpandasdataframeanalysis

解决方案


groupbyuser_id并得到rank使用received_at

df['count_n'] = df.groupby('user_id').received_at.apply(pd.Series.rank)

这不需要排序步骤,即使数据框未received_at在每个组内排序,也会分配正确的排名

如果该列user_id设置为索引(正如您的示例数据似乎表明的那样),您可以替代使用以下内容。虽然,在最新版本的 pandas 中,按命名索引分组也有效(即上述可能有效)

df.groupby(level=0).received_at.apply(pd.Series.rank)

推荐阅读