我有这个df
col
252 73.9
253 -71.8
254 -314.6
255 -202
256 -19.4
257 46.9
258 139.4
,我想从-ve
中提取连续的253 to 256
值。我已经尝试过(df.col < 0) & (df.col.shift(1) < 0)
,但它得到了254 to 256
,但却错过了253
。我应该如何更改它以获得所需的值?
答案 0 :(得分:4)
如果您只对索引感兴趣:
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
答案 1 :(得分:4)
仅过滤负值,而不是连续的负值的解决方案:
要提高性能,请通过boolean indexing
中的一列index
屏蔽col
值:
df.index[df.col.lt(0)].tolist()
对于过滤所有列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
另一种解决方案:
m = df.col.lt(0)
df = df[ m.ne(m.shift()).cumsum().duplicated(keep=False) & m]
答案 2 :(得分:1)
使用.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.loc[253:256,:]<0].index.tolist()
[253, 254, 255, 256]
答案 3 :(得分:0)
赞:
id brand_id pickup_time delivery_time
1 1 08:00 15:00
1 1 09:00 16:00
1 1 10:00 17:00
1 1 11:00 18:00