当前位置: 首页 > 知识库问答 >
问题:

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

钱浩荡
2023-03-14

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

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

这张桌子看起来像

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

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

我已经看到了如何检查两个数据集的匹配列之间的相关性的答案?,但主要的区别在于col名称不匹配。

共有1个答案

宿嘉
2023-03-14

熊猫又快又脏

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

numpyclean

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
 类似资料:
  • 我有三个数据帧,并试图计算由数据帧1调节的两个数据帧(Df2和Df3)之间的差值。如下面的示例所解释的,我有三个数据帧,Df1、Df2和Df3,它们具有共同的名称。第一步,在Df1中,我想比较“Standard”列和所有三列的值,“das”、“dss”和“tri”可能是行的,并且当这些列的任何值,“das”、“dss”和“tri”高于Df1中的“Standard”时,计算Df2和Df3中相同位置的

  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且

  • 我在dataframe中总共有100列。我试图比较两个数据帧,并找到列名不匹配的记录。我得到了以下代码的输出,但当我运行100列的代码时,作业被中止。 我正在为SCD类型2增量进程错误查找执行此操作。 请建议任何其他方式。

  • 我从表中的SQL查询中获取数据到我的熊猫数据框。数据如下所示: 现在我想从这两列中找出相关性和频率,并用Matplotlib将其可视化。我试过这样的方法: 现在,我如何以最简单的方式将这种关联可视化呢?

  • 我有2%s: 我需要这样的联合: 函数不起作用,因为列的编号和名称不同。 我怎么能这么做?

  • 我试图修改数据帧以仅包含列中的值介于99和101之间的行,并尝试使用下面的代码执行此操作。 然而,我得到了错误 ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all() 我想知道是否有一种不用循环就能做到这一点的方法。