我在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
这是一种有效的方法吗?优选地,可以与任何种类的比较条件一起使用。
答案 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
。
请注意,我假设我们在这里有独特的指数。我们可以解决这个问题,但我还没有喝咖啡。 : - )