我得到以下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)
error: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:位置参数跟随关键字参数
看起来像你在函数调用中的括号不匹配。如果任何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
返回qzxswpoi形式的2x2矩阵。当这种方式调用时,你的[[1, C], [C, 1]]
函数会起作用
autocorr
我不会将结果附加到df1 = df.copy(deep=True)
df1["output"] = autocorr(df.T[0], 1)[0, 1]
,因为这会改变后续计算的结果。