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

2024-06-12 01:10:53 发布

您现在位置:Python中文网/ 问答频道 /正文

“signal”列用0或1填充,我希望“reversion”列告诉我此列中何时有更改(即从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 

Tags: 代码importnumpy信息pandasdfsignalas
1条回答
网友
1楼 · 发布于 2024-06-12 01:10:53

如果您正在寻找更改,我建议改用diff:

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

如果希望它是int而不是boolean:

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

相关问题 更多 >