我有一个类似下面的DataFrame。我想为适当的val
迭代地将pct_change
增加group
。例如,对于group==1
,var
将首先保持1.2,然后为1.2 + 0.1 * 1.2 = 1.32,然后为1.32 + 0.2 * 1.32 = 1.584。我该怎么做而不循环?
import pandas as pd
df = pd.DataFrame({
'var': [1.2, 1.2, 1.2, 1.2, 1.2, 1.2],
'group': [1, 2, 1, 2, 1, 2],
'pct_change': [0.15, 0.21, 0.1, 0.2, 0.2, 0.1]
})
df
group pct_change var
0 1 0.15 1
1 2 0.21 1
2 1 0.10 1
3 2 0.20 1
4 1 0.20 1
5 2 0.05 1
我想获得什么:
group pct_change var
0 1 0.15 1.200
1 2 0.21 1.200
2 1 0.10 1.320
3 2 0.20 1.440
4 1 0.20 1.584
5 2 0.05 1.512
更新: @Wen建议的解决方案无法产生正确的答案:
df.assign(pct_change=(df['pct_change']+df['var'])).groupby(['group'])['pct_change'].apply(lambda x : x.cumprod()/x.iloc[0])
0 1.00000
1 1.00000
2 1.42000
3 1.64000
4 2.53328
5 2.56168
答案 0 :(得分:1)
IIUC cumprod
df.assign(pct_change=(df['pct_change']+1)).groupby('group')['pct_change'].apply(lambda x : x.cumprod()/x.iloc[0])
Out[229]:
0 1.00
1 1.00
2 1.10
3 1.20
4 1.32
5 1.26
Name: pct_change, dtype: float64