从一个值和MULTIPLY中减去所有值。移至下一个值并重复

时间:2017-02-17 02:44:11

标签: python pandas dataframe

我有一个带有三列'a','b'和'c'

的df
on

我需要的是一个额外的列'd',它代表以下计算:

((2-11)* 5.95 +(2-10)* 16.7)/ 12 = -15.59583333

((11-2)* 2 +(11-10)* 16.7)/ 12 = 2.8916666667

((10-11)* 5.95 +(10-2)* 2)/ 12 = 0.8375

[a]  [b]   [c]
 2    2    12 
 11  5.95  12 
 10  16.7  12

它应该是高度动态的,因此行数可能不同。速度也是一个问题,这就是为什么我要避免循环。

我尝试使用.apply()和.pivot()以简单的格式来调用sub()和mul(),但它没有用完。

1 个答案:

答案 0 :(得分:2)

一个选项是apply到系列a,并分别对每个元素进行计算:

df['d'] = df.a.apply(lambda x: ((x - df.a) * df.b / df.c).sum())
df

enter image description here

或者您可以预先计算df.b / df.c以提高效率:

coef = df.b / df.c
df['d'] = df.a.apply(lambda x: ((x - df.a) * coef).sum())