如何用Pythonic方式实现Pandas DataFrame连续相同值的迭代计数
解决方案
直接使用Pandas原生的groupby.cumcount()方法即可实现需求,该方法为底层C优化的矢量化操作,无循环开销,适配超大数据量场景。
完整实现代码
import pandas as pd import numpy as np # 生成测试数据 df = pd.DataFrame(np.random.randint(0,3, size=(15,4)), columns=list('ABCD')) # 1. 生成连续相同值分组标签(你原有的实现逻辑正确) df['subgroupA'] = (df.A != df.A.shift(1)).cumsum() # 2. 核心逻辑:分组内生成从1开始的递增计数 df['numConsec'] = df.groupby('subgroupA').cumcount() + 1
如果不需要留存subgroupA分组标签,可以简化为一行代码,节省内存:
df['numConsec'] = df.groupby((df.A != df.A.shift()).cumsum()).cumcount() + 1
逻辑说明
groupby按连续相同值的分组标签对数据拆分cumcount()返回每个分组内行的序号,默认从0开始计数- 末尾加1即可得到从1开始的逐行递增效果,完全匹配预期输出格式
内容的提问来源于stack exchange,提问作者schinaseatribe
相关产品推荐
相关产品推荐

