Python 3.x 迭代两个数据帧中的列以估计相关性和p值
我试图从两个数据帧的对应列估计皮尔逊相关系数和p值。到目前为止,我成功地编写了这段代码,但它只提供了最后几列的结果。需要有关此代码的帮助。另外,希望将输出保存在新的数据帧中Python 3.x 迭代两个数据帧中的列以估计相关性和p值,python-3.x,pandas,dataframe,correlation,Python 3.x,Pandas,Dataframe,Correlation,我试图从两个数据帧的对应列估计皮尔逊相关系数和p值。到目前为止,我成功地编写了这段代码,但它只提供了最后几列的结果。需要有关此代码的帮助。另外,希望将输出保存在新的数据帧中 import os import pandas as pd import scipy as sp import scipy.stats as stats df_1 = pd.DataFrame(pd.read_excel('15_Oct_Yield_A.xlsx')) df_2= pd.DataFrame(pd.read
import os
import pandas as pd
import scipy as sp
import scipy.stats as stats
df_1 = pd.DataFrame(pd.read_excel('15_Oct_Yield_A.xlsx'))
df_2= pd.DataFrame(pd.read_excel('Oct_Z_index.xlsx'))
for column in df_1.columns[1:]:
for column in df_2.columns[1:]:
x = (df_1[column])
y = (df_2[column])
correl = stats.pearsonr(x, y)
您的循环设置在几个测量值上不正确。。。在这两个for循环中使用相同的变量名,这将导致问题。此外,您正在计算内部循环之外的
correl
。。。等等
您要做的是使用1个循环在列上循环,假设两个数据帧具有相同的列名。如果没有,您将需要采取额外的步骤来查找公共列名,然后对它们进行迭代
像这样的方法应该会奏效:
import os
import pandas as pd
import scipy as sp
import scipy.stats as stats
df_1 = pd.DataFrame({ 'A': ['dog', 'pig', 'cat'],
'B': [0.25, 0.50, 0.75],
'C': [0.30, 0.40, 0.90]})
df_2 = pd.DataFrame({ 'A': ['bird', 'monkey', 'rat'],
'B': [0.20, 0.60, 0.90],
'C': [0.80, 0.50, 0.10]})
results = dict()
for column in df_1.columns[1:]:
correl = stats.pearsonr(df_1[column], df_2[column])
results[column] = correl
print(results)
谢谢你指出我犯的错误。这个解决方案很好用!