假设我具有以下数据框:
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'])
但是不会编译。我不确定如何解决这个问题,只是没有遍历所有元素。
答案 0 :(得分:1)
您可以将Series.shift
与Series.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]