我想找到滞后1,2,... N的一系列数字的自相关

在这个例子中,我有56个数字,N = 20 .

所以我有一个文件,其中前56列是随机数 . 从第57列到第77列,我的自相关滞后1,2 ... 20 . 假设我只在1-56列中加载 . 在这个例子中,我只有一行,但它也可以是几行 .

因此,目标是获得这样的结果:

result

我现在用excel做了,但是我怎么能在Python中做到这一点?而且:如果我有几行怎么办?我怎么能在多行上做到这一点?

我发现这个代码,这是一个好的开始,我想 .

import numpy
def acf(series):
    n = len(series)
    data = numpy.asarray(series)
    mean = numpy.mean(data)
    c0 = numpy.sum((data - mean) ** 2) / float(n)

def r(h):
    acf_lag = ((data[:n - h] - mean) * (data[h:] - mean)).sum() / float(n) / 
    c0
    return round(acf_lag, 3)
x = numpy.arange(n) # Avoiding lag 0 calculation
acf_coeffs = map(r, x)
return acf_coeffs

在第一个函数中'n'是数字的数量;这是我的例子'56',变量“data”只是前56列 . c0是自相关公式的分母 .

现在,我看到h是滞后的数量 . 所以在我的例子1到20中.acf_lag是自相关的实际公式,所以看起来没问题 .

我正在努力的事情是:我如何编写代码行,将其应用于我的数据帧,以便得到我想要的结果?

感谢每一个帮助!

更新:

我试图不定义函数“acf”,但是将它全部声明为一个单独的变量:

n = len(df.columns)-20
data = df.iloc[:,:56]
mean = data.mean(axis=1)
c0 = np.sum((data - mean) ** 2) / float(n)

也许我之后可以定义r(h)函数 . 但是c0每56列给我一个零,而它应该从每一列中提取平均值(1到56) . 这不会发生 .