我有一个包含两列'a‘和'b’的df
[a] [b]
11 100
2 100
10 100
我需要的是一个额外的列'c',它表示以下计算:
((11-2) + (11-10)) / 100
((2-11) + (2-10)) / 100
((10-11) + (10-2)) / 100
[a] [b] [c]
11 100 0.1
2 100 -0.17
10 100 0.07
它应该是高度动态的,因此a的行数可以不同。速度也是一个问题,这就是为什么我想避免for循环的原因。
我尝试使用.apply()和.pivot()以一种简单的格式调用sub(),但没有成功。
发布于 2017-02-14 16:33:19
另一种重写pandas的解决方案:
使用mul
、sub
、div
和sum
,对于DataFrame
的length
,最快的是len(df.index)
df['c'] = df.a.mul(len(df.index)).sub(df.a.sum()).div(df.b)
print (df)
a b c
0 11 100 0.10
1 2 100 -0.17
2 10 100 0.07
它是有效的,因为:
((11-2) + (11-10))
与以下内容相同:
(2 * 11) - (2 + 10)
与以下内容相同:
(3 * 11) - (2 + 10 + 11)
发布于 2017-02-14 16:29:09
我将举一个模糊的例子。为
>>> a = numpy.array([11, 2, 10])
>>> b = numpy.array([100, 100, 100])
你可以做到
>>> c = (len(a) * a - sum(a)) / b
与pandas数据帧类似。
https://stackoverflow.com/questions/42221022
复制相似问题