我得到了以下56列,填充了随机数:
我想要的是添加一个额外的列,该列与列1-56的自相关具有一定的滞后性。因此,如果延迟为1,则结果为0.42,而延迟为2,则结果为0.06,依此类推。
这是我使用的代码:
def autocorr(x, t):
return np.corrcoef(np.array([x[0:len(x)-t], x[t:len(x)]]))
我想其中,x是数据帧,t是滞后。
但是,当我尝试添加具有lag = 1的自相关的列时,我得到:
df["output"] = autocorr(df,1)
错误:ValueError:无法将大小为0的序列复制到数组轴 尺寸56
我在做什么错,还是有一种更简单的方法来计算具有定义滞后的自相关?
感谢帮助
史蒂芬
更新:我一直在不断尝试调整,但是找不到。有人吗?????
我尝试了以下代码:
def autocorr(x, t):
return np.corrcoef(np.array([x[:len(x)-t], x[t:len(x)]]))
但这给了我错误:
文件“”,第1行 autocorr(df(axis = 1,1)) ^ SyntaxError:位置参数紧跟关键字参数
答案 0 :(得分:1)
在我看来,就像函数调用中的括号不匹配一样。如果autocorr(df(axis=1, 1))
应该是autocorr(df(axis=1), 1)
,但pd.DataFrame
对象是不可调用的。
pd.Series.autocorr(lag=1)
函数不能实现您想要的功能吗?
import pandas as pd, numpy as np
series = pd.Series(np.random.randint(100, high=200, size=56))
print(series.autocorr(lag=1))
得到的值与您期望的值相似。
更新:关于您的原始问题:
由于您有一行len(x)
是1,而x[0:len(x)-1]
是一个空数组!
加号:在这种情况下,np.corrcoef
返回格式为[[1, C], [C, 1]]
的2x2矩阵。以这种方式调用您的autocorr
函数
df1 = df.copy(deep=True)
df1["output"] = autocorr(df.T[0], 1)[0, 1]
我不会将结果附加到df
,因为这会改变后续计算的结果。