Рассчитать процентное изменение с учетом дивидендов - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть следующие данные:

https://docs.google.com/spreadsheets/d/15Dg0JYXoQyqIVokrVoSJOBogJw_bDCY-IoBGtleOlm8/edit?usp=sharing

Мне нужно вычислить столбец Pct_Change_Adjusted в пандах:

Pct_Change_Adjusted = ((Значение [1] + Дивиденд [1]) / Значение [0] - 1)

Например, для строки № 3, № 4 и № 5 (Googlesheet) данные имеют вид:

2019-01-02 9072 A 1020,0000 0,0000 0,0200 0,0200 9072A

2019-01-03 9072 A 1040,4000 0,0000 0,0200 0,0200 9072A

2019-01-04 9072 A 1009.1880 52.0200 -0.0300 0.0200 9072A

Pct_Change_Adjusted (Row # 4) = ((1.040.4000 + 0.0000) / (1020.0000) - 1) = 0.0200

Pct_Change_Adjusted (строка № 5) = ((1.009.1880 + 52.02000) / (1040.4000) - 1) = 0.0200

Есть ли способ сделать это быстро с pct_change? (вместо итерации с условиями по данным)

Пока мой код для Pct_Change:

df.groupby (DF [6]) [3] .pct_change (1) * +1028 *

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

IIUC, скорее всего, вы можете сделать следующее:

df['Pct_Change_Adjusted'] = df.groupby(['Fund_ID', 'Fund_Series'], as_index=False) \
                              .apply(lambda x: (x.Value + x.Dividend)/x.Value.shift()-1) \
                              .reset_index(level=0, drop=True)
0 голосов
/ 03 апреля 2019

То же самое, но более подробно:

import numpy as np
import pandas as pd
import io

s = '''
Date    Fund_ID Fund_Series Value   Dividend
2019-01-02 9072 A 1020.0000 0.0000
2019-01-03 9072 A 1040.4000 0.0000
2019-01-04 9072 A 1009.1880 52.0200 
''';

df = pd.read_csv(io.StringIO(s),sep='\s')
print(df)

         Date  Fund_ID Fund_Series     Value  Dividend
0  2019-01-02     9072           A  1020.000      0.00
1  2019-01-03     9072           A  1040.400      0.00
2  2019-01-04     9072           A  1009.188     52.02

df['Pct_Change_Adjusted'] = df.groupby(['Fund_ID', 'Fund_Series'], as_index=False) \
                              .apply(lambda x: (x.Value + x.Dividend)/x.Value.shift()-1) \
                              .reset_index(drop=True).values[0]

print(df)

         Date  Fund_ID Fund_Series     Value  Dividend  Pct_Change_Adjusted
0  2019-01-02     9072           A  1020.000      0.00                  NaN
1  2019-01-03     9072           A  1040.400      0.00                 0.02
2  2019-01-04     9072           A  1009.188     52.02                 0.02
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...