Python:计算时间序列的日志返回值

时间:2015-07-31 09:19:51

标签: python pandas

我有这样的时间序列数据,其中第3行代表索引的接近值。

DAX 20150728 11173.910156
DAX 20150727 11056.400391
DAX 20150724 11347.450195
DAX 20150723 11512.110352

如何使用pandas python计算索引的日志返回值?

非常感谢!

此致

3 个答案:

答案 0 :(得分:1)

如果我理解日志正确返回,则以下是您想要的内容:

Part

修改

好的,如果它的日志内部差异那么你可以使用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

答案 1 :(得分:1)

小心

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)

答案 2 :(得分:-1)

    import numpy as np
    df['log return'] = np.log(df[2]/df[2].shift(-1)) 

df是您的数据框,按日期降序递减。