迭代来自两个数据帧的列以估计相关性和 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)