繁体   English   中英

数据框中的输出错误:分别为每行复制一个计算

[英]Wrong ouput in dataframe: Copying a calculation for every row separately

我正在寻找以下功能的修改,以便自相关的计算不仅针对第一行,而且针对每一行。

下面是我使用的功能:

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

但是它一直给出以下结果(因此,第一行的结果复制到第二行,.. row上):

结果

我已经尝试了所有方法,但是不能单独对每一行进行操作。

您是否尝试过使用Pandas内置的autocorr函数?

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.autocorr.html

import pandas as pd
import numpy as np
df = pd.DataFrame(np.array([np.arange(1,10), np.arange(10, 1, -1)]), index=['a', 'b'])
     df
    0  1  2  3  4  5  6  7  8
a   1  2  3  4  5  6  7  8  9
b  10  9  8  7  6  5  4  3  2
df.loc['a'].autocorr(lag=1)

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

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

df.loc[0] == df.T[0]  # The first row of the DataFrame

您正在遍历DataFrame的行,但未使用迭代器

autocorr(df.T[0], 1)[0, 1]

如果您喜欢使用功能,请尝试将其更改为

autocorr(row, 1)[0, 1]

相反,您可以使用:

row.autocorr(lag=t)

由于您要遍历DataFrame的行,因此index变量将保存DF中该行的索引,而row变量将保存整个行的Series类型。

另一个问题是:

df1['outpu1'] = value

这样,您可以为整个列分配值。
如果该列已经存在,则可以使用loc:

df.loc[row_index, col_index] = value

如果该列不存在,则可以首先计算整个列并将其保存为系列,然后分配给整个列表,或者只在运行循环之前将其添加

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM