在Pandas中检测列之间的值交叉

2024-04-30 03:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下数据帧:

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]

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

有没有一种惯用的方法来实现这一点,而不必遍历所有元素

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

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

但那是无法编译的。我不知道如何解决这个问题,除了循环所有元素


Tags: columnsand数据方法元素dataframedfshift
1条回答
网友
1楼 · 发布于 2024-04-30 03:35:10

可以将^{}^{}一起使用,后者小于^{em>,与<相同,后者大于或等于,与>=相同:

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使用^{}并在定义条件时返回booleans


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

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

print(idx)
[4]

相关问题 更多 >