Python 熊猫:基于多个不同的列创建列

Python 熊猫:基于多个不同的列创建列,python,pandas,Python,Pandas,好吧,我觉得这个很简单,在前面的一个帖子里应该有正确的答案,但显然我自己或者在一个帖子里都找不到答案。以下是我得到的: 我有一个数据框,其中包含属于组的不同样本 pd.DataFrame({'sample1': [1,2,3], 'sample2':[2,4,6], 'sample3':[4,4,4], 'sample4':[6,6,6], 'divisor':[1,2,1]}) groups=[["sample1","sample2"],["s

好吧,我觉得这个很简单,在前面的一个帖子里应该有正确的答案,但显然我自己或者在一个帖子里都找不到答案。以下是我得到的: 我有一个数据框,其中包含属于组的不同样本

pd.DataFrame({'sample1': [1,2,3], 'sample2':[2,4,6], 'sample3':[4,4,4], 'sample4':[6,6,6], 'divisor':[1,2,1]})
groups=[["sample1","sample2"],["sample3","sample4"]]
我希望代码te根据此示例所在的组的总和为每个示例创建一个新列。若商小于0,则结果应为0,否则应为原始值。第一部分完美地完成了总结:

for i in range(len(groups)):
    df["groupsum"+str(i)]=df[groups[i]].sum(axis=1)

    for sample in groups[i]:
        df[sample+"_corr"]=""
        df[sample+"_corr"]= df[sample].apply(lambda x: 0 if (df["groupsum"+str(i)]/df["divisor"])<4 else df[sample])
那么正确的处理方法是什么呢?
提前非常感谢

只需使用
np。我们在此
而不是使用apply循环数据帧:

df[sample+"_corr"]= np.where((df["groupsum"+str(i)]/df["divisor"])<4 , 0 , df[sample])
这也是更好的性能,因为apply是非常慢的解决方案,应该尽可能避免

df[sample+"_corr"]= np.where((df["groupsum"+str(i)]/df["divisor"])<4 , 0 , df[sample])
    sample1 sample2 sample3 sample4 divisor groupsum0   sample1_corr    sample2_corr    groupsum1   sample3_corr    sample4_corr
0   1   2   4   6   1   3   0   0   10  4   6
1   2   4   4   6   2   6   0   0   10  4   6
2   3   6   4   6   1   9   3   6   10  4   6