我有如下数据框:
df = pd.DataFrame((np.random.randn(5,4)*10).astype(int), columns=list('abcd'))
def cal(a, b):
if a + b > 5:
return a+b, a-b
我如何将此函数应用于 df,cal 取的两个变量将是 df['a'] 和 ['b'],输出 a+b,a-b 将设置为 df['c'], df['d'].
循环 df 有效,但我如何使用 apply 或 applymap 来实现此目的(也许需要调整 cal)?
最佳答案
您可以使用掩码对其进行矢量化:
vals = pd.concat((df['a'] + df['b'], df['a'] - df['b']), axis=1).values
df[['c', 'd']].mask(df['a'] + df['b'] > 5, vals)
Out:
c d
0 6 3
1 -12 3
2 12 -14
3 21 -31
4 15 -21
原始df在哪里
df
Out:
a b c d
0 3 -2 6 3
1 -4 -8 -12 3
2 -1 13 10 -4
3 -5 26 -21 17
4 -3 18 14 19
关于python - DataFrame基于多列应用函数,也为多列设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45270632/