игнорировать первую строку в функции np.where - PullRequest
0 голосов
/ 20 марта 2019

Столбец 'signal' заполнен 0 или 1, и я хочу, чтобы столбец 'reverse' сообщал мне, когда происходит изменение в этом столбце (то есть, от 0 до 1 или от 1 до 0).

Проблема: код ниже дает мне эту информацию правильно для всех строк, кроме первой.Причина в том, что он пытается посмотреть на значение перед первым для столбца «сигнал», и, поскольку он не находит никакого значения (конечно, это первое!), Он говорит, что есть изменение (как это происходит, когда значение столбца изменяется с 0 на 1 или с 1 на 0).

Как это исправить?Я бы хотел, чтобы код игнорировал первое расхождение, в основном.

import pandas as pd
import numpy as np

d= {'signal':[0,0,0,1,1,0]}
df_zinc = pd.DataFrame(data=d)

df_zinc['reversal'] = np.where(df_zinc['signal']!=df_zinc['signal'].shift(),1,0)

print(df_zinc)

ВЫХОД

  signal reversal
0     0     1 
1     0     0 
2     0     0 
3     1     1 
4     1     0 
5     0     1 

1 Ответ

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

Если вы ищете изменения, я бы предложил вместо этого использовать diff:

df_zinc['signal'].diff().fillna(0)!=0

, если вы предпочитаете его как int вместо логического:

bool_s = df_zinc['signal'].diff().fillna(0)!=0

int_s = bool_s.astype(int)

Тестирование:

df_zinc['reversal'] = (df_zinc['signal'].diff().fillna(0)!=0).astype(int)

Выход

 signal reversal
0   0   0
1   0   0
2   0   0
3   1   1
4   1   0
5   0   1
...