首页 > 解决方案 > 匹配列熊猫数据框

问题描述

我想通过它们的列名匹配两个熊猫数据框。

import pandas as pd
df1 = pd.DataFrame([[0,2,1],[1,3,0],[0,4,0]], columns=['A', 'B', 'C'])


    A   B   C
0   0   2   1
1   1   3   0
2   0   4   0

df2 = pd.DataFrame([[0,0,1],[1,5,0],[0,7,0]], columns=['A', 'B', 'D'])

    A   B   D
0   0   0   1
1   1   5   0
2   0   7   0

如果名称匹配,则什么也不做。(保留df2的列)

如果一列在数据框 1 中但不在数据框 2 中,则将数据框 2 中的列添加为零向量。

如果一列在 Dataframe 2 中但不在 Dataframe 1 中,请将其删除。

输出应如下所示:

    A   B   C
0   0   0   0
1   1   5   0
2   0   7   0

我知道我是否这样做:

df2 = df2[df1.columns]

我得到:

KeyError: "['C'] not in index"

我也可以手动添加零向量,但当然这是一个更长数据集的玩具示例。有没有更聪明/pythonic的方式来做到这一点?

标签: pythonpandasdataframe

解决方案


看来,df2列应该与df1此操作之后的列相同,因为应该添加 indf1和不df2应该添加的列,而df2应该删除仅 in 的列。我们可以简单地将列与 a匹配(这相当于添加具有填充值的新列):reindex df2df1fill_value=0df2 = df2[df1.columns]

df2 = df2.reindex(columns=df1.columns, fill_value=0)

df2

   A  B  C
0  0  0  0
1  1  5  0
2  0  7  0

推荐阅读