计算每对Pandas中两列之间的相关性

2024-04-20 05:15:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

 affecting VA  affected VB
  A        3   B       -1
  A        4   B        1
  B        10  A         2
  B        7   A        -2

对于每对影响和影响,我想计算VA和VB之间的相关系数和p值(使用scipy.stats.pearsonr)

生成的数据帧类似于:

 affecting  affected correlation_coefficient  P_value
   A           B           ...                  ...
   B           A           ...                  ...

 def calc_coefficient ( a, b):
     cor_coef = scipy.stats.pearsonr(a, b)[0]
     Pvalue = scipy.stats.pearsonr(a, b)[1]
     return pd.Series(dict(correlation_coef=cor_coef, P_value=Pvalue))

 uplifts.groupby(["affecting_product","affected_product"])[["UpliftA","UpliftB"]].apply(calc_coefficient)

此解决方案不起作用并返回:calc_系数()缺少1个必需的位置参数:“b”


Tags: 数据valuestatscalcscipyvbcorrelationva
1条回答
网友
1楼 · 发布于 2024-04-20 05:15:16

为所有组列传递x,并为a,b使用序列x['VA'], x['VB']

def calc_coefficient(x):
    Pvalue, cor_coef = scipy.stats.pearsonr(x['VA'], x['VB'])
    return pd.Series(dict(correlation_coef=cor_coef, P_value=Pvalue))

mask = df.duplicated(subset=["affecting","affected"], keep=False)
df1 = df[mask].groupby(["affecting","affected"]).apply(calc_coefficient)

print (df1)
                    correlation_coef  P_value
affecting affected                           
A         B                      1.0      1.0
B         A                      1.0      1.0

相关问题 更多 >