Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dataframe中输出错误:分别为每行复制计算_Python_Python 3.x_Pandas_Math_Correlation - Fatal编程技术网

Python dataframe中输出错误:分别为每行复制计算

Python dataframe中输出错误:分别为每行复制计算,python,python-3.x,pandas,math,correlation,Python,Python 3.x,Pandas,Math,Correlation,我正在寻找下面函数的修改,以便计算每一行的自相关,而不仅仅是第一行 以下函数是我使用的函数: import pandas as pd import numpy as np df = pd.read_excel("directory\\file.xlsx") def autocorr(x, t): y = np.corrcoef(np.array([x[0:len(x)-t], x[t:len(x)]])) return y df1 = df.copy(deep=True)

我正在寻找下面函数的修改,以便计算每一行的自相关,而不仅仅是第一行

以下函数是我使用的函数:

import pandas as pd
import numpy as np
df = pd.read_excel("directory\\file.xlsx")

def autocorr(x, t):
     y = np.corrcoef(np.array([x[0:len(x)-t], x[t:len(x)]]))
     return y

df1 = df.copy(deep=True) 

for index,row in df1.iterrows():
     df1["output1"] = autocorr(df.T[0], 1)[0, 1]
     df1["output2"]= autocorr(df.T[0], 2)[0, 1]
     df1["output3"]= autocorr(df.T[0], 3)[0, 1]
     df1["output4"]= autocorr(df.T[0], 4)[0, 1]
     df1["output5"]= autocorr(df.T[0], 5)[0, 1]
     df1["output6"]= autocorr(df.T[0], 6)[0, 1]
     df1["output7"]= autocorr(df.T[0], 7)[0, 1]
     df1["output8"]= autocorr(df.T[0], 8)[0, 1]
     df1["output9"]= autocorr(df.T[0], 9)[0, 1]
     df1["output10"]= autocorr(df.T[0], 10)[0, 1]
     df1["output11"]= autocorr(df.T[0], 11)[0, 1]
     df1["output12"]= autocorr(df.T[0], 12)[0, 1]



df1
但它不断给出以下结果(因此第一行的结果,复制到第二、第三、第……行):


我已经尝试了所有的方法,但我不能对每一行都单独使用。

您是否尝试过使用Pandas的内置自动校正功能

df.T['a'].autocorr(滞后=1)

在您的代码中,看起来您每次都发送相同的行

df.loc[0] == df.T[0]  # The first row of the DataFrame
您正在对数据帧的行进行迭代,但不使用迭代器

autocorr(df.T[0], 1)[0, 1]
如果您喜欢使用函数,请尝试将其更改为

autocorr(row, 1)[0, 1]
相反,您可以使用:

row.autocorr(lag=t)
由于您在数据帧的行上进行迭代,index变量将保存来自DF的行的索引,row变量将保存整行的序列类型

另一个问题是:

df1['outpu1'] = value
这样,您就可以为整个列指定值。
如果该列已存在,则可以使用loc:

df.loc[row_index, col_index] = value
如果列不存在,您可以首先计算整个列并将其保存为一个系列,然后分配给整个列表,或者在运行循环之前添加它

df.insert(loc=0, column='output1' value='np.nan')

我试图在代码中使用autocorr(row,1)[0,1]和row.autocorr(lag=t),但它仍然为每一行提供相同的值。我编辑了我的答案,忘了提到df1['outpu1']=value将值分配给整个列。我就是不明白。我现在通过更改autocorr(row,1)[0,1]来尝试您的调整,在开始行之前:对于索引…,我现在放置:df.insert(loc=0,column='output1'value='np.nan'),因为它是我要添加的新列。这仍然给了我相同的值……您是否也将行:df1['outpu1']=autocorr(行,1)[0,1]更改为df1.loc[index,'outpu1']=autocorr(行,1)[0,1]?
df.insert(loc=0, column='output1' value='np.nan')