Pandas无分组生成连续行号及Numpy高性能实现问询
问题根因
你使用的代码输出全为1的原因非常明确:groupby('id_col')会按照唯一id列进行分组,由于id是唯一标识,每个分组仅包含1行数据。cumcount()的作用是返回分组内行的序号(从0开始计数),所有分组的返回值都是0,加1后自然全部为1,完全不满足全局连续行号的需求。
实现方案
1. Pandas原生实现
不需要使用分组逻辑,直接生成全局连续序列赋值即可:
# 方法1:直接通过range生成,适合原有索引无需保留的场景 df['row_num'] = range(1, len(df) + 1) # 方法2:基于重置后的索引生成,兼容原有索引不连续、非数字的场景 df['row_num'] = df.reset_index(drop=True).index + 1
2. Numpy高性能实现(大数据量优先选择)
当DataFrame行数在10万级以上时,numpy方案的性能是纯pandas方案的2~5倍,实现代码如下:
import numpy as np df['row_num'] = np.arange(len(df)) + 1
该方案直接在内存中生成连续整数数组,无额外的DataFrame结构操作开销,是所有可行方案中性能最优的。
内容的提问来源于stack exchange,提问作者Roger Steinberg
相关产品推荐
相关产品推荐

