忽略 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
列 '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