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

时间:2019-03-20 07:51:33

标签: python python-3.x pandas where

“信号”列中填充了0或1,我希望“反转”列告诉我该列何时发生更改(即从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 :(得分:0)

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