使用Python datatable按分组生成行号的实现方法
直接使用Python datatable原生的dt.cumcount()分组累计计数函数即可,不需要额外依赖numpy,一行代码就能实现需求:
data[:, dt.update(id = dt.cumcount()), by(f.grp)]
相关说明
dt.cumcount()默认在每个分组内从0开始生成递增行序号,和你期望的输出结果完全匹配dt.update是datatable官方推荐的原地新增/修改列的规范写法,相比你之前手动分组计数、拼接numpy数组的实现,逻辑更简洁,执行效率也更高,在处理百万级以上大数据量时优势尤为明显- 如果你需要和R data.table的
1:.N保持一致从1开始编号,将代码调整为dt.cumcount() + 1即可
执行代码后即可得到你需要的结果:
| grp value id | str32 int32 int64 -- + ----- ----- ----- 0 | a 2 0 1 | a 3 1 2 | b 1 0 3 | b 2 1 4 | b 5 2 5 | b 9 3 6 | c 2 0
内容的提问来源于stack exchange,提问作者langtang
相关产品推荐
相关产品推荐

