如何在Pandas中高效生成条件递增的序号列?
高效实现分组递增序号(针对大规模DataFrame)
针对你这个需求,矢量化操作是处理大规模数据的最优解——完全避开Python级别的循环,利用pandas底层的C实现来提速,百万级数据也能轻松搞定。
核心思路
我们可以先把Event列等于START的标记为1,其他为0,然后对这个标记列做累加(cumsum()),这样每遇到一次START,累加值就会递增,后续的"操作"行自然继承当前的累加值,完美匹配你的需求。
完整代码示例
import pandas as pd # 示例数据 df = pd.DataFrame({'Event': ['START', '操作', 'START', '操作', '操作']}) # 生成Seq列:先标记START为1,其余为0,再累加 df['Seq'] = (df['Event'] == 'START').cumsum() # 查看结果 print(df)
输出结果
Event Seq 0 START 1 1 操作 1 2 START 2 3 操作 2 4 操作 2
为什么这个方法高效?
df['Event'] == 'START'会生成一个布尔数组,这是矢量化的比较操作,速度极快;cumsum()是pandas内置的矢量化累加方法,底层由C语言实现,比你之前用的循环(比如for逐行判断赋值)效率高几十甚至上百倍,完全适配大规模DataFrame的场景。
如果之前你用的是循环遍历的方式,那确实会在数据量大的时候卡顿——Python的循环是逐行处理,而矢量化操作是批量处理整个数组,这两者的性能差距在数据量越大时越明显。
内容的提问来源于stack exchange,提问作者sacuL
相关产品推荐
相关产品推荐

