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

标签 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? 看到了答案, 但主要区别在于列名称不匹配。

最佳答案

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

关于python - 如何在具有不同列名的两个数据帧之间执行关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41823728/

相关文章:

python - 使用合并用名称替换标签

python - 连续 True 区间的开始和结束索引

python - 在 xlsxwriter 中自定义 X 和 Y 轴值

python - 从c中的嵌入式python代码加载DLL

python - Pandas 按组转置数字列

python - 如何在 matplotlib 和 pandas 中绘制按两列分组的数据框

pandas - Python中的大型枢纽分析表

python - 使用 re.match 匹配字符串不起作用

python - 单个元素的访问比列表慢

python - Jinja2 无法在 Google App Engine 上导入