gpt4 book ai didi

python - 检测 Pandas 中列之间的值交叉

转载 作者:行者123 更新时间:2023-12-01 06:42:10 24 4
gpt4 key购买 nike

假设我有以下数据框:

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

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

a [i - 1] < b[i] and a[i] >= b[i]

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

是否有一种 Pandas 惯用的方法可以实现此目的,而无需迭代所有元素?

我尝试通过这样做创建一个带有标志的新列来指示交叉:

df['t'] = (df['a'].shift(1).values < df['b'].values and di['a'].values >= df['b']).astype(bool)

但这不会编译。我不知道如何解决这个问题,除非循环遍历所有元素。

最佳答案

您可以使用 Series.shift Series.lt 这是“小于”,与 < 相同和 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]

关于python - 检测 Pandas 中列之间的值交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59399896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com