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

标签 python pandas

假设我有以下数据框:

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/

相关文章:

python - 数据帧的平均值

python - 从循环中的一周中减去日期时间

python - 尝试使用OpenCV显示图像时发生错误(-215)size.width> 0 && size.height> 0

python - 列表元素列表的组合

Python Pandas 读取带有特定行终止符的 CSV 文件

python - 修改数据框行 - Panda Python

python - Python 中具有多个线程的多个进程

python - 如何更改 seaborn violinplot 图例标签?

python - 用于 pypi/pip 导入和本地运行脚本的正确包组织

python - 如果不存在并基于 2 列条件,则在 df pandas 中添加行