Pandas从一个值中减去所有值,移动到下一个值并重复

2024-05-17 01:16:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df,有两列'a'和'b'

[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(),但没有成功。你知道吗


Tags: dffor高度格式动态速度计数pivot
2条回答

我举一个小例子。为了

>>> a = numpy.array([11, 2, 10])
>>> b = numpy.array([100, 100, 100])

你能做到的

>>> c = (len(a) * a - sum(a)) / b

类似于熊猫数据帧。你知道吗

另一个解决方案重写为:

使用^{}^{}^{}^{},对于lengthDataFrame最快的是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)

相关问题 更多 >