检测熊猫中各列之间的值交叉

时间:2019-12-18 20:59:10

标签: python pandas

假设我具有以下数据框:

setImageNamed("spinner")
startAnimatingWithImages(in: NSRange(location: 0, length: 6), duration: 0.75, repeatCount: 9999)

我想列出一个索引列表,其中:

  

a [i-1] = b [i]

为了检测时间序列中的值何时与另一个值交叉

是否有一种熊猫惯用的方式来实现这一目标而无需遍历所有元素?

我试图通过执行以下操作来创建带有标志的新列:

df = pd.DataFrame({'a': [10, 20, 30, 40, 50], 'b': [0, 10, 40, 45, 50]}, columns = ['a', 'b'])

但是不会编译。我不确定如何解决这个问题,只是没有遍历所有元素。

1 个答案:

答案 0 :(得分:1)

您可以将Series.shiftSeries.lt一起使用,该{<3>“小于” ,与<Series.ge相同,该{大于或等于”,并且与>=相同:

mask = df['a'].shift().lt(df['b']) & df['a'].ge(df['b'])
# same as (df['A'].shift() < df['b']) & (df['a'] >= df['b'])

0    False
1    False
2    False
3    False
4     True
dtype: bool

注意,我们不必指定astype(bool),pandas可以与boolean indexing一起使用,并在定义条件时返回booleans


要使用indices获取行中的True,请使用:

idx = df[mask].index.tolist()

print(idx)
[4]