我有一个df,它有三列'a','b‘和'c’
[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.8916666667
((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(),但是没有成功。
发布于 2017-02-17 02:49:39
一种选择是通过系列apply
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())
https://stackoverflow.com/questions/42288480
复制相似问题