使用DataFrame和pct_change()计算年利率

时间:2019-02-10 22:26:16

标签: python pandas dataframe

我想在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()并获得相同的结果?

0 个答案:

没有答案