如何在一次迭代中对多列进行点双列相关

How to do point biserial correlation for multiple columns in one iteration

我正在尝试为我的数据集中的一组列计算点双序列相关。我可以对单个变量执行此操作,但是如果我需要在一次迭代中计算所有列,则会显示错误。

代码如下:

df = pd.DataFrame({'A':[1, 0, 1, 0, 1], 'B':[6, 7, 8, 9, 10],'C':[9, 4, 6,9,10],'D':[8,9,5,7,10]})

from scipy import stats
corr_list = {}
y = df['A'].astype(float)
for column in df:
    x = df[['B','C','D']].astype(float)
    corr = stats.pointbiserialr(x, y)
    corr_list[['B','C','D']] = corr 
print(corr_list)

TypeError: No loop matching the specified signature and casting was found for ufunc add

x 必须是列而不是数据框,如果您使用列而不是数据框,它将起作用。你可以试试这个:

df = pd.DataFrame({'A':[1, 0, 1, 0, 1], 'B':[6, 7, 8, 9, 10],'C':[9, 4, 6,9,10],'D':[8,9,5,7,10]})
print(df)
from scipy import stats
corr_list = []
y = df['A'].astype(float)


for column in df:
    x=df[column]
    corr = stats.pointbiserialr(list(x), list(y))
    corr_list.append(corr[0])
print(corr_list)

顺便说一句,您可以使用 print(df.corr()),这将为您提供数据帧的相关矩阵

您可以使用pd.DataFrame.corrwith()函数:

df[['B', 'C', 'D']].corrwith(df['A'].astype('float'), method=stats.pointbiserialr)

输出将是列的列表及其与目标 DataFrame 或 Series 的对应关系 & p-values(分别为第 0 行和第 1 行)。 Link to docs:

    B               C           D
0   4.547937e-18    0.400066    -0.094916
1   1.000000e+00    0.504554    0.879331