一个数据帧与另一个数据帧的相关矩阵

Bri*_*ian 5 python numpy dataframe pandas

我正在阅读这个问题的答案。然后出现了如何计算一个数据帧中所有列与另一数据帧中所有列的相关性的问题。因为这个问题似乎不会得到回答,所以我想问它,因为我需要类似的东西。

假设我有数据框A并且B

import pandas as pd
import numpy as np

A = pd.DataFrame(np.random.rand(24, 5), columns=list('abcde'))
B = pd.DataFrame(np.random.rand(24, 5), columns=list('ABCDE'))
Run Code Online (Sandbox Code Playgroud)

如何获得如下所示的数据框:

pd.DataFrame([], A.columns, B.columns)

     A    B    C    D    E
a  NaN  NaN  NaN  NaN  NaN
b  NaN  NaN  NaN  NaN  NaN
c  NaN  NaN  NaN  NaN  NaN
d  NaN  NaN  NaN  NaN  NaN
e  NaN  NaN  NaN  NaN  NaN
Run Code Online (Sandbox Code Playgroud)

但充满了适当的相关性?

piR*_*red 5

一种方法是:

pd.concat([A, B], axis=1).corr().filter(B.columns).filter(A.columns, axis=0)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更有效的方法是:

Az = (A - A.mean())
Bz = (B - B.mean())

Az.T.dot(Bz).div(len(A)).div(Bz.std(ddof=0)).div(Az.std(ddof=0), axis=0)
Run Code Online (Sandbox Code Playgroud)

你会得到与上面相同的结果。

  • @piRSquared 实际上 ddof 应该是 0 才能得到相同的结果。不过这很奇怪。 (3认同)