Home > Net >  Cumulative result with specific number in pandas
Cumulative result with specific number in pandas

Time:07-25

This is my DataFrame:

index, value
10, 109
11, 110
12, 111
13, 110
14, 108
15, 106
16, 100

I want to build another column based on multippliing by 0,05 with cumulative result.

index, value, result
10, 109, 109
11, 110, 109   (0,05 * 1) = 109,05
12, 111, 109   (0,05 * 2) = 109,1
13, 110, 109   (0,05 * 3) = 109,15
14, 108, 109   (0,05 * 4) = 109,2
15, 106, 109   (0,05 * 5) = 109,25
16, 100, 109   (0,05 * 6) = 109,3

I tried to experiment with shift and cumsum, but nothing works. Can you give me an advice how to do it?

Now I do something like:

counter = 1
result = {}
speed = 0,05
for item in range (index   1, last_row_index   1):
    result[item] = result[first_index]   speed * counter
    counter  = 1

P.S. During your answers I've edited column result. Please don't blame me. I am really silly person, but I try to grow.

Thank you all for your answers!

CodePudding user response:

Use numpy:

df['result'] = df['value'].iloc[0]*1.05**np.arange(len(df))

Output:

   index  value      result
0     10    109  109.000000
1     11    110  114.450000
2     12    111  120.172500
3     13    110  126.181125
4     14    108  132.490181
5     15    106  139.114690
6     16    100  146.070425

After you edited the question:

df['result'] = df['value'].iloc[0] 0.05*np.arange(len(df))

output:

   index  value  result
0     10    109  109.00
1     11    110  109.05
2     12    111  109.10
3     13    110  109.15
4     14    108  109.20
5     15    106  109.25
6     16    100  109.30

CodePudding user response:

if indices are consecutive

df['result'] = (df['index'] - df['index'][0]) * 0.05   df['value'][0]

or not:

df['result'] = df.value.reset_index().index * 0.05   df.value[0]

CodePudding user response:

df['result'] = np.arange(len(df)) * 0.05
df['result'] = df['value'].add(df['result'])
print(df)

Output:

   value  result
0    109  109.00
1    110  110.05
2    111  111.10
3    110  110.15
4    108  108.20
5    106  106.25
6    100  100.30
  • Related