我如何在数据框中执行之前的计算

how do I perform the before calculation in dataframe

你好假设我有一个 df

x=[.12,.02,.05,.04]
y=[1,1,1,1]
df=pd.DataFrame(dict(x=x,y=y))

但我想更改 'y' 列下的值,第一行是 100,第二行是 102(即 100*.02),第三行是 107.1 (102*1.05) 等等。

我该怎么做? (我觉得应该用shift函数来完成?)

我猜你想做这个操作:y = 100*(x+y).

如果是这种情况,您可以执行以下操作:

df['y'] = 100*df.sum(axis=1)

我想下面是你需要的

df.loc[0,'y'] = 100
for i in range(1, len(df)):
    df.loc[i, 'y'] = df.loc[i-1, 'y'] * (df.loc[i, 'x'] + df.loc[i, 'y'])

    x       y
0   0.12    100.000
1   0.02    102.000
2   0.05    107.100
3   0.04    111.384

你是这个意思吗?

df.loc[i, 'y'] = 100 
for i in range(1, len(df)): 
    df.loc[i, 'y'] = df.loc[i - 1, 'y'] * (1 + df.loc[i, 'x'])

输出:

      x        y
0  0.12  100.000
1  0.02  102.000
2  0.05  107.100
3  0.04  111.384

我相信你需要cumprod()。它需要对第一个数字进行一些硬编码,之后似乎没问题。

import pandas as pd
import numpy as np
x=[.12,.02,.05,.04]
y=[1,1,1,1]
df=pd.DataFrame(dict(x=x,y=y))

df['x'] = df['x'] + 1 #Add 1 to make the cumprod() easier
df['y'].loc[0] = 100 #Force the first value to be 100
df['y'].loc[1:] = df['x'].loc[1:].cumprod() * df['y']
df['x'] = df['x'] - 1 #Substract 1 to keep original values

输出:

      x          y
0  0.12  100.00000
1  0.02    1.02000
2  0.05    1.07100
3  0.04    1.11384