我正在尝试创建一个新列,如果一组列的任何值满足相同条件,则将其编码为1。这是我尝试过的,但出现错误。我也尝试用where语句替换,并且在每个循环中都将替换new_var值,但我想保留循环先前步骤中的重新编码(不替换为每个步骤,而只是附加编码)。所以我需要的是:如果a,b,c列中的任何值<-0.5或> 0.5,则我需要将New_Var编码为1,否则为零。
df = pd.DataFrame(np.random.randn(10, 5), columns=list('abcde'))
df
cols = ['a', 'b', 'c']
def rec_cap(x,y):
if (x<-0.5) | (x>0.5):
return 1
else:
return y
df['new_var']=0
for p in cols:
df['new_var']=df.loc[:,[p]].apply(rec_cap, df['new_var'])
答案 0 :(得分:1)
IIUC
((df.loc[:,cols].gt(0.5))|(df.loc[:,cols].lt(-0.5))).any(1).astype(int)
Out[564]:
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 0
dtype: int32