在python

时间:2018-01-23 14:46:56

标签: python pandas pandas-groupby

我有两个名为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数据帧的形状和值是不同的。我想将df2的列名与df1的列名匹配,并选择df1的所有行,其标题与df2的列名匹配} df2仅用于选择保留所有行的df1的特定列。我尝试了下面给出的一些代码,但这给了我一个空索引。

df1.columns.intersection(df2.columns)

上面的代码没有给我我的支持,因为它给索引标题没有值。我想编写一个代码,在其中我可以将我的两个数据帧作为输入,并比较列标题以供选择。我没有硬编码列名。

3 个答案:

答案 0 :(得分:4)

我相信你需要:

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

或者像@Zero在评论中指出的那样:

df = df1[df1.columns & df2.columns]

答案 1 :(得分: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

答案 2 :(得分:1)

交叉路口:

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