Пометить изменение столбцов от 0 до значения строка за строкой в ​​Pandas DataFrame - PullRequest
2 голосов
/ 13 апреля 2019

В этом примере у меня есть набор данных, который имеет два столбца prime и prime2, которые я хочу проверить на предмет изменений в строке по стилю:

>>> df = pd.DataFrame({'id_police':['p123','p123','p123','b123','b123'],
                   'date':['24/01/2017','24/11/2017','25/02/2018','24/02/2018','24/03/2018'],
                   'prime':[0,0,10,20,30],
                   'prime2':[0,30,10,20,0],
})
###
  id_police        date  prime  prime2
0      p123  24/01/2017      0       0
1      p123  24/11/2017      0      30
2      p123  25/02/2018     10      10
3      b123  24/02/2018     20      20
4      b123  24/03/2018     30       0

Это ожидаемый результат (если два столбца меняются, флаг будет отличен от 0, и добавьте их в измененном месте, также есть 10 столбцов, таких как prime & prime2) :

  id_police        date  prime  prime2  changed  changedwhere(optional)
0      p123  24/01/2017      0       0<-      0           nan
1      p123  24/11/2017      0<-    30<-      1        prime2
2      p123  25/02/2018     10<-    10        1         prime
3      b123  24/02/2018     20      20        0           nan
4      b123  24/03/2018     30       0        0           nan

То, что я пробовал, но выглядитво всех столбцах:

df.diff()

Заранее благодарим за помощь, если есть вопросы, не стесняйтесь оставлять комментарии.

1 Ответ

1 голос
/ 13 апреля 2019

Мы можем использовать Series.eq над axis=1 и комбинировать его с .shift для проверки предыдущей строки следующим образом:

df['changed'] = (df[['prime', 'prime2']].shift().eq(0).any(axis=1) & df[['prime', 'prime2']].ne(0).any(axis=1)).astype(int)

print(df)
  id_police        date  prime  prime2  changed
0      p123  24/01/2017      0       0        0
1      p123  24/11/2017      0      30        1
2      p123  25/02/2018     10      10        1
3      b123  24/02/2018     20      20        0
4      b123  24/03/2018     30       0        0

Примечание , если у вас есть 10 столбцов, это будет сложнее, но для вашего примера этого достаточно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...