如何在一次迭代中对多列进行点双列相关
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
我正在尝试为我的数据集中的一组列计算点双序列相关。我可以对单个变量执行此操作,但是如果我需要在一次迭代中计算所有列,则会显示错误。
代码如下:
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