如何在Python中对DataFrame列的连续数值进行计数?
实现方法
直接通过分组+累计计数的方式就能实现需求,完整代码如下:
import pandas as pd import numpy as np np.random.seed(150) df = pd.DataFrame(data={'a':[1,2,3,4,5,15,16,17,18,203,204,205],'b':np.random.randint(50000,size=(12))}) # 生成连续数值段的分组标签 df['group'] = (df['a'].diff() != 1).cumsum() # 对每个分组生成从1开始的顺序计数 df['c'] = df.groupby('group').cumcount() + 1 # 移除中间分组列(可选) df = df.drop('group', axis=1) print(df)
步骤解释:
- 生成分组标签:
df['a'].diff()计算列a相邻元素的差值,当差值不等于1时,说明当前行属于新的连续段,返回布尔序列。再用cumsum()将布尔值转为连续的分组编号(True视为1,False视为0),这样每个连续数值段会被分配同一个编号。 - 生成顺序计数:通过
groupby('group')按连续段分组,cumcount()会在每个分组内从0开始计数,加1后就得到从1开始的顺序数,也就是需求中的列c。 - 清理中间列:如果不需要分组标签列,可以用
drop移除,最终结果和预期完全一致。
内容的提问来源于stack exchange,提问作者Sun Jar
相关产品推荐
相关产品推荐

