python - 如何在熊猫数据框组中创建订单?
问题描述
我有数据数据框,我想在其中添加列,该列将分别指示每个 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 进行迭代更有效且可能更简单的解决方案?
解决方案
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)
推荐阅读
- php - php显示图像onlick并打开新窗口
- javascript - 有什么方法可以在它的回调中访问一个承诺函数的输入吗?
- unity3d - Visual Studio 远程调试监视器在没有计算机名称的情况下无法启动
- arrays - 在连接表上获取数组的匹配值
- mysql - 就支持的函数和数据类型而言,最接近 SQLite 数据库的替代品是什么?
- r - ggplot2 scale_shape_manual 图例不显示
- html - 当我从控制器加载视图时,某些 html 功能会丢失
- c# - AutoMapper 不映射子实体列表
- meshlab - 如何使用 MeshLab 查看剖面切割
- javascript - 更改正则表达式浮点表达式以强制小数点前的前导数字