迭代增加熊猫其他列中的列的百分比

时间:2018-07-27 16:22:08

标签: python pandas

我有一个类似下面的DataFrame。我想为适当的val迭代地将pct_change增加group。例如,对于group==1var将首先保持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

1 个答案:

答案 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