Python 提取数据中的连续负值

Python 提取数据中的连续负值,python,pandas,Python,Pandas,我有这个df col 252 73.9 253 -71.8 254 -314.6 255 -202 256 -19.4 257 46.9 258 139.4 我想从253到256中提取连续的-ve值。我尝试了(df.col

我有这个df

         col
252      73.9

253     -71.8

254     -314.6

255     -202

256     -19.4

257      46.9

258      139.4

我想从
253到256中提取连续的
-ve
值。我尝试了
(df.col<0)和(df.col.shift(1)<0)
,它得到了
254到256
,但是错过了
253
。如何更改它以获得所需的值?

使用
.loc
访问器选择
253
256
df.loc[253:256,:])
) 布尔选择和掩码值小于零

df=(df[df.loc[253:256,:]<0]).dropna() 

    col1
253 -71.8
254 -314.6
255 -202.0
256 -19.4

df=(df[df.loc[253:256,:]如果您只对索引感兴趣:

df.loc[df.lt(0).col].index.tolist()

[253, 254, 255, 256]
如果需要连续值的数据帧:

df.loc[df.lt(0).col]

      col
253 -71.8
254 -314.6
255 -202.0
256 -19.4

仅过滤负值而非连续负值的解决方案:

df.loc[df.lt(0).col]

      col
253 -71.8
254 -314.6
255 -202.0
256 -19.4
为了提高性能,请按掩码将过滤器
中的值索引为一列

对于筛选所有列
loc
不重要,它用于筛选列和掩码:

df[df.col.lt(0)]

#for filter only one column to Series
df.loc[df.col.lt(0), 'col']

#for filter only one column to DataFrame
df.loc[df.col.lt(0), ['col']]

要过滤连续的负片,请使用:

print (df)
       col
252   73.9
253  -71.8
254 -314.6
255 -202.0
256  -19.4
257   46.9
258 -202.0 <- removed, because not consecutive.
259  139.4


m = df.col.lt(0)

df = df[(~m).cumsum()[m].duplicated(keep=False).reindex(df.index, fill_value=False)]
print (df)
       col
253  -71.8
254 -314.6
255 -202.0
256  -19.4
像这样:

In [1720]: df[df['col'].lt(0)].index.tolist()
Out[1720]: [253, 254, 255, 256]

df.index[df.lt(0.col]
?@jezraelnice,无需为数据帧而烦恼,只需要索引。酷。那会更快。没问题,我会把它取出来。我已经尝试过df.loc[df.lt(0.col]它给了我一个错误“TypeError:无法使用块值操作0”你能添加一些负值和非连续的值吗?因为不清楚是否需要删除单独的负值。谢谢。
m = df.col.lt(0)

df = df[ m.ne(m.shift()).cumsum().duplicated(keep=False) & m]
In [1720]: df[df['col'].lt(0)].index.tolist()
Out[1720]: [253, 254, 255, 256]