在映射函数时使用多个pandas列的总和

时间:2014-11-12 18:54:37

标签: function pandas dataframe

我正在尝试在DataFrame中创建一个新列。

如果其他几列的总和为== 0,我希望新列为* b,如果总和为== 1则为1,否则为0。

我总结的列数是动态的,因为它可能是我总结的3列或者它可能是100.我有一个列名列表(list_to_check)可以是任何长度。< / p>

df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd1':[5,0,1], 'd2':[5,0,1], 'dn':[5,0,1]})

list_to_check = ['d1','d2','dn']

def func(a,b,c):
    if sum(c) == 0:
        a*b
    elif sum(c) == 1:
        1
    else:
        0

df['new_column'] = np.vectorize(func)(df.a,df.b,df[list_to_check])

1 个答案:

答案 0 :(得分:1)

vals = df[list_to_check].sum(1)
df['new_col'] = 0
df.loc[vals == 0, 'new_col'] = df.a * df.b
df.loc[vals == 1, 'new_col'] = 1