我有一个带有 ID、时间戳和值的 Pandas 数据框。每个 ID 有多行,按 ID 和时间戳升序排列。我需要确定两个值 - 'A' 和 'B' - 出现在每个 ID 的任意两行中的 ID,按该顺序。例如:-
ID Timestamp Value
001 00:01 A
001 00:02 B
001 00:03 B
002 00:01 B
002 00:02 A
002 00:03 B
003 00:01 B
003 00:02 A
003 00:03 A
上面,ID 001 和 002 符合条件,因为 A 在 ID 组中的某处位于 B 之前。ID 003 不符合条件,因为 A 永远不会在 B 之前。
每组 ID 将至少包含一个“A”和一个“B”,所以我知道如果“A”在前,那么它就符合条件。但是,如果“B”在前,则没有此类保证。
我曾尝试使用 idxmin 来定位每个值的第一次出现并比较位置,但我无法让它与 groupby 一起工作。我什至很难考虑使用循环来规避我的缺点,但如果有必要,我可以这样做 - 但是在我看来,必须有一种适当的 pythonic 方法来解决这个问题,我只是不知道它是什么。
非常感谢任何帮助或建议。谢谢!
>>> df.sort_values("Timestamp") \ # mandatory for shift
.groupby("ID")["Value"] \ # group by 'ID'
.apply(lambda x: any(x > x.shift())) # search B > A
ID
001 True
002 True
003 False
Name: Value, dtype: bool
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句