Pandas数据的对数回报率

2024-04-26 14:10:12 发布

您现在位置:Python中文网/ 问答频道 /正文

Python pandas有一个pct_change函数,我用它来计算数据帧中股票价格的回报:

ndf['Return']= ndf['TypicalPrice'].pct_change()

我使用以下代码来获得对数返回,但它给出的值与pct.change()函数的值完全相同:

ndf['retlog']=np.log(ndf['TypicalPrice'].astype('float64')/ndf['TypicalPrice'].astype('float64').shift(1))
#np is for numpy

Tags: 数据函数代码pandasreturnnp对数change
3条回答

日志返回只是1的自然日志加上算术返回。那这个怎么样?

df['pct_change'] = df.price.pct_change()
df['log_return'] = np.log(1 + df.pct_change)

下面是一种使用.shift()计算日志返回的方法。其结果与pct_change()计算的总收益相似,但不相同。你能上传一份你的样本数据(dropbox共享链接)来重现你所看到的不一致吗?

import pandas as pd
import numpy as np

np.random.seed(0)
df = pd.DataFrame(100 + np.random.randn(100).cumsum(), columns=['price'])
df['pct_change'] = df.price.pct_change()
df['log_ret'] = np.log(df.price) - np.log(df.price.shift(1))

Out[56]: 
       price  pct_change  log_ret
0   101.7641         NaN      NaN
1   102.1642      0.0039   0.0039
2   103.1429      0.0096   0.0095
3   105.3838      0.0217   0.0215
4   107.2514      0.0177   0.0176
5   106.2741     -0.0091  -0.0092
6   107.2242      0.0089   0.0089
7   107.0729     -0.0014  -0.0014
..       ...         ...      ...
92  101.6160      0.0021   0.0021
93  102.5926      0.0096   0.0096
94  102.9490      0.0035   0.0035
95  103.6555      0.0069   0.0068
96  103.6660      0.0001   0.0001
97  105.4519      0.0172   0.0171
98  105.5788      0.0012   0.0012
99  105.9808      0.0038   0.0038

[100 rows x 3 columns]

单行,只计算一次日志。 首先转换为日志空间,然后取1周期差异

np.log(df.price).diff()

相关问题 更多 >