как просмотреть значения предыдущей строки только для выбранных случаев в pandas - PullRequest
2 голосов
/ 25 февраля 2020

Мои данные выглядят как ниже.

   col_1  col_2
      1        1
      1        1
      p        0
      1        1
      n        2
      n        2
      p        0
      p        0

Я хочу вычислить значения в col_2 из col_1. Логика c, которую я хочу применить: Когда значение col_1 = 'p', заменить значение в col_2 из значения col_2 предыдущей строки и других значений в col_2 не изменится ни для какого другого значения col_1 и ожидаемого конечного результата выглядит следующим образом:

   col_1  col_2
      1        1
      1        1
      p        **1**
      1        1
      n        2
      n        2
      p        **2**
      p        **2**

Я рассчитываю эти столбцы в дополнение к другим на основе даты в функции assign (). Это единственный шаг, который я не могу понять. Потому что в этом я смотрю на значение предыдущего ряда; так что shift () может работать, но мне нужно только искать предыдущее значение для col_2, когда col_1 = 'p'. В настоящее время я делаю это через l oop, что дает мне возможность оглянуться назад на 1 строку и проверить / заменить значение. Потому что для l oop это не эффективное решение.

Знаете ли вы, как избежать a для l oop и сделать это более pandas способом?

1 Ответ

4 голосов
/ 25 февраля 2020

Вы можете использовать mask, затем ffill:

df['col_2'] = df['col_2'].mask(df['col_1']=='p').ffill()
...