在Python中匹配两个Pandas数据框的列名

9

我有两个名为df1df2的pandas数据帧,如下所示:

df1: a      b    c    d
     1      2    3    4
     5      6    7    8

并且

df2:      b    c   
          12   13   

我希望结果是这样的:
result:    b    c    
           2    3    
           6    7    

需要注意的是,a b c d 是pandas dataframe中的列名。两个pandas dataframe的形状和值是不同的。我想将df2的列名与df1的列名匹配,并选择所有与df2的列名匹配的df1的行。只使用df2来选择df1的特定列,保留所有行。我尝试了下面给出的一些代码,但得到了一个空索引。

df1.columns.intersection(df2.columns)

上述代码没有给我我的结果,因为它只给出了具有无值的索引标题。我想要编写一段能够接受两个数据框作为输入并比较列标题以进行选择的代码。我不必硬编码列名。


3
似乎你只需要使用 df1[df1.columns.intersection(df2.columns)] 即可。 - cs95
你已经有了列名,只需要使用它来索引 df1 即可。 - cs95
或者,df1[df1.columns & df2.columns] - Zero
3个回答

9
我相信您需要的是:

我相信您需要:

df = df1[df1.columns.intersection(df2.columns)]

或者像@Zero在评论中指出的那样:
df = df1[df1.columns & df2.columns]

不需要连接,看一下预期结果就好了;-) - Nico Albers
有没有一种方法可以针对两个不同长度和不同列的数据框执行此操作?比如说,df1可能有a、b、c、d、e、f这些列,而df2则有b、c、g、h、k这些列? - Benjamin Diaz
@BenjaminDiaz - 索引并不重要,解决方案应该能够很好地处理“df1具有a、b、c、d、e、f,而df2具有b、c、g、h、k”的情况。 - jezrael

2
或者,使用reindex
In [594]: df1.reindex(columns=df2.columns)
Out[594]:
   b  c
0  2  3
1  6  7

同样也作为

In [595]: df1.reindex(df2.columns, axis=1)
Out[595]:
   b  c
0  2  3
1  6  7

1

除了交集之外:

df = df1[df1.columns.isin(df2.columns)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接