Python 提取数据中的连续负值
我有这个dfPython 提取数据中的连续负值,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
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]