This is my dataframe:
df = pd.DataFrame({'a': [10, 20, 50]})
And this is the output that I want:
a b
0 10 100
1 20 20
2 50 10
I have an initial value which is 1000. Then I want to create column b
. The first row of b
is 10 percent of 1000 which is 100. The second row is 20 percent of 100 that we got previously. And the last row is 50 percent of 20.
I have tried this code but it doesn’t work:
df = df.reset_index(drop=True)
df.loc[0, 'b'] = 1000 * (df.a.iloc[0] / 100)
df['b'] = (df.a / 100) * df.b.shift(1)
>Solution :
Are you looking for cumprod
?
(df['a'] / 100).cumprod() * 1000
0 100.0
1 20.0
2 10.0
Name: a, dtype: float64
Explanation: First divide by 100 since we’re dealing with percentages. Then find cumulative product of the series. Finally multiply by 1000 which is your starting value.
df['b'] = (df['a'] / 100).cumprod() * 1000
df
a b
0 10 100.0
1 20 20.0
2 50 10.0