我有两个名为df1
和df2
的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)
上面的代码没有给我我的支持,因为它给索引标题没有值。我想编写一个代码,在其中我可以将我的两个数据帧作为输入,并比较列标题以供选择。我没有硬编码列名。
答案 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)]