pandas按索引层级分组后如何生成行的组内相对位置列
pandas 分组生成组内序号的最优实现
你需要的功能可以直接用pandas内置的groupby.cumcount()方法一步完成,完全不需要手动遍历分组,性能更优也符合pandas的惯用写法:
df['event'] = df.groupby(level='userid').cumcount()
逻辑说明
groupby(level='userid'):和你现有逻辑一致,按多级索引的第一层级userid进行分组cumcount():会自动生成每个分组内从0开始的顺序序号,正好匹配你需要的组内相对位置需求
如果需要组内序号从1开始,只需要调整为:
df['event'] = df.groupby(level='userid').cumcount() + 1
方案优势
对比你目前使用的循环遍历方案,内置方法的优势非常明显:
- 代码更简洁,符合pandas矢量化操作的惯用写法
- 性能更高:数据量达到十万行以上时,速度是手动遍历的几十到上百倍
- 避免了手动循环赋值可能出现的索引对齐隐患,运行结果和你现有循环输出完全一致
内容的提问来源于stack exchange,提问作者Luciano Santos
相关产品推荐
相关产品推荐

