如何执行具有不同列名的两个数据帧之间的关联

时间:2017-01-24 08:51:15

标签: python pandas

我在数据帧df1中有一组列(col1,col2,col3) 我在数据帧df2中有另一组列(col4,col5,col6) 假设这两个数据帧具有相同的行数。

如何生成在df1和df2之间进行成对关联的相关表?

表格看起来像

    col1 col2 col3
col4 ..   ..   ..
col5 ..   ..   ..
col6 ..   ..   ..

我使用df1.corrwith(df2),似乎没有按要求生成表格。

我在How to check correlation between matching columns of two data sets?看到了答案,但主要区别在于col名称不匹配。

1 个答案:

答案 0 :(得分:7)

pandas快速而肮脏

pd.concat([df1, df2], axis=1, keys=['df1', 'df2']).corr().loc['df2', 'df1']

numpy干净

def corr(df1, df2):
    n = len(df1)
    v1, v2 = df1.values, df2.values
    sums = np.multiply.outer(v2.sum(0), v1.sum(0))
    stds = np.multiply.outer(v2.std(0), v1.std(0))
    return pd.DataFrame((v2.T.dot(v1) - sums / n) / stds / n,
                        df2.columns, df1.columns)

corr(df1, df2)

示例

df1 = pd.DataFrame(np.random.rand(10, 4), columns=list('abcd'))

df2 = pd.DataFrame(np.random.rand(10, 3), columns=list('xyz'))
pd.concat([df1, df2], axis=1, keys=['df1', 'df2']).corr().loc['df2', 'df1']

          a         b         c         d
x  0.235624  0.844665 -0.647962  0.535562
y  0.357994  0.462007  0.205863  0.424568
z  0.688853  0.350318  0.132357  0.687038
corr(df1, df2)

          a         b         c         d
x  0.235624  0.844665 -0.647962  0.535562
y  0.357994  0.462007  0.205863  0.424568
z  0.688853  0.350318  0.132357  0.687038