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

问题描述 投票:0回答:1

列'信号'填充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)

OUTPUT

  signal reversal
0     0     1 
1     0     0 
2     0     0 
3     1     1 
4     1     0 
5     0     1 
python python-3.x pandas where
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.