选择Pandas数据帧索引,之后列中的数据都高于特定值

时间:2016-04-14 13:37:41

标签: python pandas dataframe comparison

我在pandas中有一个数据框,类似于:

df.head()
                             P1'S1       P1'S2       P1'S3       P1'S4  
Year_Day_Hour_Min_Sec.                                                   
2005-01-20 00:01:00      10.292887    5.849372    5.154812    5.824268   
2005-01-20 00:02:00     423.334728  415.878661  346.619247  333.317992   
2005-01-20 00:03:00     340.753138  429.447699  370.945607  417.832636   
2005-01-20 00:04:00     494.067643  426.577406  332.811715  361.725941   
2005-01-20 00:05:00     415.266039  396.711994  370.289749  398.025802

我希望得到索引,此时从该索引开始的所有值都高于400列中的P1'S1。因此,在这种情况下,正确的答案是索引2005-01-20 00:04:00

这是一种有效的方法吗?优选地,可以与任何种类的比较条件一起使用。

1 个答案:

答案 0 :(得分:2)

这有点间接,但如果我们采用反转列的累积最小值,我们就会知道在该点或超出该点时看到的最低值。 的第一个值是> 400是您正在寻找的位置:

>>> ((df["P1'S1"].iloc[::-1].cummin().iloc[::-1]) > 400).idxmax()
'2005-01-20 00:04:00'

基本上,一旦我们到达

>>> df["P1'S1"].iloc[::-1].cummin().iloc[::-1]
Year_Day_Hour_Min_Sec.
2005-01-20 00:01:00     10.292887
2005-01-20 00:02:00    340.753138
2005-01-20 00:03:00    340.753138
2005-01-20 00:04:00    415.266039
2005-01-20 00:05:00    415.266039
Name: P1'S1, dtype: float64

我们可以使用idxmax返回触及最大值的第一个索引的事实

>>> (df["P1'S1"].iloc[::-1].cummin().iloc[::-1] > 400)
Year_Day_Hour_Min_Sec.
2005-01-20 00:01:00    False
2005-01-20 00:02:00    False
2005-01-20 00:03:00    False
2005-01-20 00:04:00     True
2005-01-20 00:05:00     True
Name: P1'S1, dtype: bool

进入2005-01-20 00:04:00

请注意,我假设我们在这里有独特的指数。我们可以解决这个问题,但我还没有喝咖啡。 : - )