2024-05-14 17:54:18 发布
网友
我有这样的时间序列数据,其中第三行表示索引的结束值。
DAX 20150728 11173.910156 DAX 20150727 11056.400391 DAX 20150724 11347.450195 DAX 20150723 11512.110352
如何使用pandas python计算索引的日志返回?
非常感谢!
问候
如果我正确理解日志返回,则您需要以下内容:
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简洁地执行此操作:
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表示升序日期-在这两种情况下,shift都提供前一个日期的值。
在此特定示例中,您需要首先将日期列设置为索引,否则除法操作将失败:
df['close'].set_index("date",inplace=True)
import numpy as np df['log return'] = np.log(df[2]/df[2].shift(-1))
df是按日期降序排列的数据帧。
如果我正确理解日志返回,则您需要以下内容:
编辑
如果是日志内部差异,那么可以使用
diff
简洁地执行此操作:小心
因为对于可能变成负的指数以及负利率等风险因素来说,这将是失败的。在这些情况下
根据我的经验,通常是比较安全的方法。使用+1还是-1取决于时间序列的顺序。使用-1表示降序日期,+1表示升序日期-在这两种情况下,shift都提供前一个日期的值。
在此特定示例中,您需要首先将日期列设置为索引,否则除法操作将失败:
df是按日期降序排列的数据帧。
相关问题 更多 >
编程相关推荐