Это продолжение этого вопроса: определить координаты, где пересекаются временные ряды двух панд, и сколько раз пересекать временные ряды
У меня есть 2 ряда в моем фрейме данных Pandasи хотел бы знать, где они пересекаются.
A B
0 1 0.5
1 2 3.0
2 3 1.0
3 4 1.0
4 5 6.0
С помощью этого кода мы можем создать третий столбец, который будет содержать True каждый раз, когда две серии пересекаются:
df['difference'] = df.A - df.B
df['cross'] = np.sign(df.difference.shift(1))!=np.sign(df.difference)
np.sum(df.cross)-1
Теперь,вместо простого Истинного или Ложного я хотел бы знать, в каком направлении произошло пересечение.Например: от 1 до 2 он пересекся вверх, от 2 до 3 вниз, от 3 до 4 нет пересечений, от 4 до 5 вверх.

A B Cross_direction
0 1 0.5 None
1 2 3.0 Upwards
2 3 1.0 Downwards
3 4 1.0 None
4 5 6.0 Upwards
В псевдокоде должно быть так:
cross_directions = [none, none, ... * series size]
for item in df['difference']:
if item > 0 and next_item < 0:
cross_directions.append("up")
elif item < 0 and next_item > 0:
cross_directions.append("down")
Проблема в том, что next_item
недоступен с этим синтаксисом (мы получаем это в исходном синтаксисе, используя .shift(1)
)и что для этого требуется много кода.
Должен ли я изучить реализацию приведенного выше кода, используя что-то, что может сгруппировать цикл по 2 элементам одновременно?Или есть более простое и элегантное решение, подобное предыдущему вопросу?