Вычислить годовую ставку, используя DataFrame и pct_change () - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть столбец внутри DataFrame, который я хочу использовать для выполнения операции:

n = step/12
step = 3
t1 = step - 1
pd.DataFrame(100*((df[t1+step::step]['Column'].values / df[t1:-t1:step]['Column'].values)**(1/n) - 1))

Возможный набор значений для интересующего столбца может быть:

>>> df['Column']

0          NaN
1          NaN
2       7469.5
3          NaN
4          NaN
5       7537.9
6          NaN
7          NaN
8       7655.2
9          NaN
10         NaN
11      7712.6
12         NaN
13         NaN
14      7784.1
15         NaN
16         NaN
17      7819.8
18         NaN
19         NaN
20      7898.6
21         NaN
22         NaN
23      7939.5
24         NaN
25         NaN
26      7995.0
27         NaN
28         NaN
29      8084.7
...

Итак, df[t1+step::step]['Column'] даст нам:

>>> df[5::3]['Column']

5       7537.9
8       7655.2
11      7712.6
14      7784.1
17      7819.8
20      7898.6
23      7939.5
26      7995.0
29      8084.7
32      8158.0
35      8292.7
38      8339.3
41      8449.5
44      8498.3
47      8610.9
50      8697.7
53      8766.1
56      8831.5
59      8850.2
62      8947.1
65      8981.7
68      8983.9
71      8907.4
74      8865.6
77      8934.4
80      8977.3
83      9016.4
86      9123.0
89      9223.5
92      9313.2
...

И наконец df[t1:-t1:step]['Column']

>>> df[2:-2:3]['Column']
2       7469.5
5       7537.9
8       7655.2
11      7712.6
14      7784.1
17      7819.8
20      7898.6
23      7939.5
26      7995.0
29      8084.7
32      8158.0
35      8292.7
38      8339.3
41      8449.5
44      8498.3
47      8610.9
50      8697.7
53      8766.1
56      8831.5
59      8850.2
62      8947.1
65      8981.7
68      8983.9
71      8907.4
74      8865.6
77      8934.4
80      8977.3
83      9016.4
86      9123.0
89      9223.5
...

При этих значениях мы ожидаем следующий результат:

>>> pd.DataFrame(100*((df[5::3]['Column'].values / df[2:-2:3]['Column'].values)**4 -1))

0    3.713517
1    6.371352
2    3.033171
3    3.760103
4    1.847168
5    4.092131
6    2.087397
7    2.825602
8    4.563898
9    3.676223
10   6.769944
11   2.266778
12   5.391516
13   2.330287
14   5.406150
15   4.093476
16   3.182961
17   3.017786
18   0.849662
19   4.452016
20   1.555866
21   0.098013
22  -3.362834
23  -1.863919
24   3.140454
25   1.934544
26   1.753587
27   4.813692
28   4.479794
29   3.947179

Поскольку это напоминает многое из того, что pct_change() мне было интересно, смогу ли я достичь того же результата, выполнив что-то вроде:

>>> df['Column'].pct_change(periods=step)**(1/n) * 100

До сих пор я получаю неправильные результаты.Можно ли использовать pct_change() и достичь того же результата?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...