如何在数据帧中识别具有连续索引的子集

时间:2018-06-06 14:37:37

标签: python pandas dataframe indexing

我有一个数据框,其定义如下:

df = pd.DataFrame({'A':[5,8,96,3,5,41,2,45,7,8], 'B':[1,2,3,5,6,10,11,12,13,18]})
df = df.set_index('B')
df.index.name = None

我的目标是为具有连续索引的数据帧子集分配如下值:

enter image description here

算法:从图像中可以看出,前3行的索引1,2,3增加1(因此连续)。因此,我将这个子集分配给C列中的值0。 第二子集由具有连续索引5和6的行形成(注意,没有索引4!)。因此,我在C列中为它们指定值1。

问题:您是否知道实现此类结果的有效且智能的方法?我通过使用大量的for循环和ifs来实现这样的结果,但它非常讨厌。

1 个答案:

答案 0 :(得分:4)

您可以将diffcumsum一起使用;计算diff,检查它是否等于1(连续条件),然后cumsum(计数)非连续跳跃:

df['C'] = df.index.to_series().diff().ne(1).cumsum().sub(1) 

df
#     A  C
#1    5  0
#2    8  0
#3   96  0
#5    3  1
#6    5  1
#10  41  2
#11   2  2
#12  45  2
#13   7  2
#18   8  3