实际上,你可以采用 @MatBailie 建议的向量化方法来实现:
df['B'] = df['A']*2 - df['A'].iloc[0]
对于更通用的情况,假设需要乘以任何系数 N
:
N = 2
df['B'] = df['A']*N - df['A'].iloc[0]*(N-1)
这样会得到如下输出:
A B(N=1) B(N=2) B(N=3)
1 3 3 3 3
2 5 5 7 9
3 6 6 9 12
5 5 5 7 9
6 9 9 15 21
这里需要一些解释来理解其原理:
每一步中,设当前值为 a(n)
,输出值为 b(n)
。根据描述,b(n)
等于 b(n-1) + (a(n) - a(n-1)) * N
,这可以递推简化为 b(n) = b(0) + (a(n) - a(0)) * N
,因为在序列的第一项上 b(0) = a(0)
。因此,通用公式变为 b(n) = a(n) * N - a(0) * (N-1)
。
对于特定情况 N=2
的输出是:
A B
1 3 3
2 5 7
3 6 9
5 5 7
6 9 15
原始回答是:
你可能无法以向量方式解决这个问题,因为第 n 个值取决于第 n-1 步的结果,我认为你必须通过迭代来解决:
def expand_dist(s):
s = list(s)
prev = s[0]
out = []
for v in s:
out.append(prev+(v-prev)*2)
return out
df['B'] = expand_dist(df['A'])