我有一个定义如下的数据框:
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
我的目标是为具有连续索引的数据帧子集分配一个值,如下所示:
算法:正如您从图像中看到的那样,前 3 行的索引为 1、2、3,它们增加 1(因此是连续的)。因此,我将 C 列中的值 0 分配给该子集。 第二个子集由具有连续索引 5 和 6 的行组成(注意没有索引 4!)。因此,我在 C 列中为它们分配了值 1。
问题:您知道实现这样的结果的高效且智能的方法吗?我能够通过使用大量 for 循环和 ifs 来实现这样的结果,但它非常讨厌。
最佳答案
您可以将diff
与cumsum
一起使用;计算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
关于python - 如何识别数据框中具有连续索引的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723114/