根据多列中的值和相同条件在熊猫中创建新列

时间:2018-07-04 19:15:14

标签: python pandas

我正在尝试创建一个新列,如果一组列的任何值满足相同条件,则将其编码为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'])

1 个答案:

答案 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