как выполнить расчет перед данными в фрейме - PullRequest
0 голосов
/ 21 января 2020

Привет. Предположим, у меня есть df

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

enter image description here

, но я хочу изменить значения в столбце 'y' так, чтобы первая строка была 100, 2-й ряд - 102 (т.е. 100 * 0,02), третий ряд - 107,1 (102 * 1,05) и т. Д.

Как мне это сделать? (Я думаю, что это должно быть сделано с помощью функции сдвига?)

Ответы [ 4 ]

2 голосов
/ 21 января 2020

Я считаю, что вам нужно 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
1 голос
/ 21 января 2020

Полагаю, что вам нужно ниже

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
0 голосов
/ 21 января 2020

Это то, что вы имеете в виду?

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
0 голосов
/ 21 января 2020

Я предполагаю, что вы хотите выполнить эту операцию: y = 100*(x+y).

Если это так, вы можете сделать следующее:

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