Python:计算时间序列的日志返回
我有这样的数据时间序列,其中第三行表示索引的结束值Python:计算时间序列的日志返回,python,pandas,Python,Pandas,我有这样的数据时间序列,其中第三行表示索引的结束值 DAX 20150728 11173.910156 DAX 20150727 11056.400391 DAX 20150724 11347.450195 DAX 20150723 11512.110352 如何使用python计算索引的日志返回 多谢各位 问候 import numpy as np df['log return'] = np.log(df[2]/df[2].shift(-1)) df是按日期降序排序的数据
DAX 20150728 11173.910156
DAX 20150727 11056.400391
DAX 20150724 11347.450195
DAX 20150723 11512.110352
如何使用python计算索引的日志返回
多谢各位
问候
import numpy as np
df['log return'] = np.log(df[2]/df[2].shift(-1))
df是按日期降序排序的数据帧。如果我正确理解日志返回,则以下是您想要的:
In [155]:
t="""DAX 20150728 11173.910156
DAX 20150727 11056.400391
DAX 20150724 11347.450195
DAX 20150723 11512.110352"""
df = pd.read_csv(io.StringIO(t), header=None, sep='\s+',names=['exchange', 'date', 'close'], parse_dates=[1])
df
Out[155]:
exchange date close
0 DAX 2015-07-28 11173.910156
1 DAX 2015-07-27 11056.400391
2 DAX 2015-07-24 11347.450195
3 DAX 2015-07-23 11512.110352
In [157]:
df['log return'] = np.log(df['close']) - np.log(df['close'].iloc[0])
df
Out[157]:
exchange date close log return
0 DAX 2015-07-28 11173.910156 0.000000
1 DAX 2015-07-27 11056.400391 -0.010572
2 DAX 2015-07-24 11347.450195 0.015411
3 DAX 2015-07-23 11512.110352 0.029818
编辑
好的,如果是日志内差异,那么您可以使用diff
简洁地执行此操作:
In [161]:
df['log return'] = np.log(df['close']).diff()
df
Out[161]:
exchange date close log return
0 DAX 2015-07-28 11173.910156 NaN
1 DAX 2015-07-27 11056.400391 -0.010572
2 DAX 2015-07-24 11347.450195 0.025984
3 DAX 2015-07-23 11512.110352 0.014406
小心
np.log(df['close']).diff()
因为这将不适用于可能变为负值的指数以及风险因素,例如负利率。在这些情况下
np.log(df['close']/df['close'].shift(1)).dropna()
根据我的经验,最好是更安全的方法。使用+1还是-1取决于时间序列的顺序。使用-1表示降序日期,使用+1表示升序日期-在这两种情况下,班次都提供前一个日期的值
在此特定示例中,您需要首先将日期列设置为索引,否则除法操作将失败:
df['close'].set_index("date",inplace=True)
我不知道什么是日志返回,但根据这不是日志(关闭值)-日志(第一个关闭值)?日志返回是值比率的对数。而且我认为这更可能是一天一天比一天一天。EdChum谢谢你,这正是我需要的,实际上我只想保留数据格式和名称,并且只将第三列的值更改为日志返回。那么你想覆盖该列吗?所以类似于
df['close']=np.log(df['close']).diff()
?是的,这正是我需要的:只需计算第3列中的日志返回。所有其他列应保持原样。应为np.log(df[2]/df[2].shift(1))