Как определить первое возникновение условия во фрейме данных python и выполнить его расчет? - PullRequest
0 голосов
/ 19 марта 2020

Я действительно изо всех сил пытаюсь получить логи c для этого. У меня есть набор данных под названием Col , как показано ниже. Я использую Python и Pandas

Я хочу установить новый столбец с именем «STATUS». Логика c - это

a. Когда Col == 0, я буду Покупать . Но эта покупка произойдет только тогда, когда Col == 0 будет первым значением в наборе данных или после Status Sell . Не может быть двух Buy значений без Sell между

b. При Col <= - 8 я <strong>продам . Но это произойдет, если в колонке Сатуса будет предшествовать покупка. Не может быть двух продаж без покупки между ними.

Я привел пример того, как я хочу, чтобы мой вывод был. Любая помощь действительно приветствуется

Здесь необработанные данные находятся в столбце: Col и вывод, который я хочу, находится в Статус

  +-------+--------+
    |  Col  | Status |
    +-------+--------+
    | 0     | Buy    |
    | -1.41 | 0      |
    | 0     | 0      |
    | -7.37 | 0      |
    | -8.78 | Sell   |
    | -11.6 | 0      |
    | 0     | Buy    |
    | -5    | 0      |
    | -6.1  | 0      |
    | -8    | Sell   |
    | -11   | 0      |
    | 0     | Buy    |
    | 0     | 0      |
    | -9    | Sell   |
    +-------+--------+

1 Ответ

0 голосов
/ 20 марта 2020

Заняло у меня некоторое время. Опирается на следующее свойство:
последний заказ, который вы можете видеть с этого момента, даже если вы решили не отправлять его, всегда является последним решением, которое вы приняли. (В противном случае он был бы отправлен.)

df['order'] = (df['order'] == 0).astype(int) - (df['order'] <= -8).astype(int)
orders_no_filter = df.loc[df['order'] != 0, 'order']
possible = (orders_no_filter != orders_no_filter.shift(1))
df['order'] = df['order'] * possible.reindex(df.index, fill_value=0)
...