我有一个数据帧,其中缺少一些索引号.我如何剪切丢失索引号之前的数据帧



[在此处输入图像描述][1]

索引号72在原始数据帧中丢失,如图所示。我想剪切像[0:71,:]这样的数据帧,条件是当索引序列中断时,数据帧会自动从以前的索引值中剪切。

比较索引的移位值减去原始值(如果更像1(与[::-1]Series.cummax的反向排序,boolean indexing中的最后一个滤波器:

df = pd.DataFrame({'a': range(3,13)}).drop(3)
print (df)
a
0   3
1   4
2   5
4   7
5   8
6   9
7  10
8  11
9  12
df = df[df.index.to_series().shift(-1, fill_value=0).sub(df.index).gt(1)[::-1].cummax()]
print (df)
a
0  3
1  4
2  5

我想到了这个:

df = pd.DataFrame({'col':[1,2,3,4,5,6,7,8,9]}, index=[-1,0,1,2,3,4,5,7,8])
ind = next((i for i in range(len(df)-1) if df.index[i]+1!=df.index[i+1]),len(df))+1
>>> df.iloc[:ind]
'''
col
-1    1
0    2
1    3
2    4
3    5
4    6
5    7

使用numpy,获取从第一个索引到第一个不匹配(排除(的等于正常范围的值:

df[np.minimum.accumulate(df.index==np.arange(df.index[0], df.index[0]+len(df)))]

示例:

col
-1    1
0    2
1    3
3    4
4    5

输出:

col
-1    1
0    2
1    3

最新更新