Python 从一个值中减去所有值并相乘。移动到下一个值并重复

Python 从一个值中减去所有值并相乘。移动到下一个值并重复,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有三列“a”、“b”和“c”的df [a] [b] [c] 2 2 12 11 5.95 12 10 16.7 12 我需要的是一个额外的列“d”,它表示以下计算: ((2-11)*5.95+(2-10)*16.7)/12=-15.59583333 ((11-2)*2+(11-10)*16.7)/12=2.89166667 ((10-11)*5.95+(10-2)*2)/12=0.8375 [a] [b] [c] [d] 2 2

我有一个带有三列“a”、“b”和“c”的df

[a]  [b]   [c]
 2    2    12 
 11  5.95  12 
 10  16.7  12
我需要的是一个额外的列“d”,它表示以下计算:

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

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

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

[a]  [b]   [c]    [d]
 2    2    12  -15.59583333
 11  5.95  12   2.8916666667
 10  16.7  12   0.8375
它应该是高度动态的,因此行计数可以不同。速度也是一个问题,这就是为什么我要避免for循环


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

一个选项是通过系列
a
应用,并分别对每个元素进行计算:

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


或者您可以预先计算
df.b/df.c
,使其稍微更有效:

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

我提供的初始输入位于groupby对象后面。因此,当我在组对象上使用apply运行代码时,它会为'd'返回NAN。我尝试了.transform,但这只给了我'0',然后可能
.groupby(…).apply(lambda g:g.assign(d=g.a.apply)(lambda x:((x-g.a)*g.b/g.c).sum())
。如果不知道您的实际数据,我无法保证解决您的问题。您是一个f****天才!非常感谢您