迭代来自两个数据帧的列以估计相关性和 p 值
Iterating over columns from two dataframes to estimate correlation and p-value
我正在尝试从两个数据帧的相应列中估计 Pearson 的相关系数和 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_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)
我正在尝试从两个数据帧的相应列中估计 Pearson 的相关系数和 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_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)