忽略 np.where 函数中的第一行

disregard first row in np.where function

列 'signal' 填充了 0 或 1,我希望列的反转在该列发生变化时告诉我(即从 0 到 1 或 1 到 0)。

问题:下面的代码为我提供了除第一行以外所有行的正确信息。原因是它试图查看列 'signal' 的第一个值之前的值,并且由于它没有找到任何值(当然 - 它是第一个!),它说有一个更改(就像当列的值从 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 

如果您正在寻找更改,我建议您改用 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