2017-08-03 123 views
0

我想比较两个熊猫数据帧的标题并过滤匹配的列。 df1是我的大数据框有两个标题,df2是一种字典,我保存了每一个列标题,我将需要从df1。比较熊猫数据帧的标题

所以,如果DF1是这样的:

A   B   C   D 
    a   b   c   d 
0.469112 -0.282863 -1.509059 -1.135632 
1.212112 -0.173215 0.119209 -1.044236 
-0.861849 -2.104569 -0.494929 1.071804 
0.721555 -0.706771 -1.039575 0.271860 
-0.424972 0.567020 0.276232 -1.087401 
-0.673690 0.113648 -1.478427 0.524988 

和DF2是这样的:

B   D   E 

我需要的输出:

 B   D 
-0.282863 -1.135632 
-0.173215 -1.044236 
-2.104569 1.071804 
-0.706771 0.271860 
    0.567020 -1.087401 
    0.113648 0.524988 

,也是一个不匹配的标题元素列表:

A  C 

以及来自DF1缺失的元素:

E 

到目前为止,我在这里尝试了ILOC命令和很多不同的建议,对计算器比较行。由于我比较标题虽然不可能。

编辑:我曾尝试

df1.columns.intersection(df2.columns) 

但结果是:

MultiIndex(levels=[[], []], 
      labels=[[], []]) 

这是因为多个头?

+2

请提供您写的代码与您想要做的最接近。 –

+0

请提供:df1.head()。to_dict()。在我眼中看起来很奇怪。 –

回答

3

下面的是一些方法,为df2

In [1047]: df1.columns.difference(df2.columns) 
Out[1047]: Index([u'A', u'C'], dtype='object') 

Colu给出df1df2

In [1041]: df1.columns 
Out[1041]: Index([u'A', u'B', u'C', u'D'], dtype='object') 

In [1042]: df2.columns 
Out[1042]: Index([u'B', u'D', u'E'], dtype='object') 

列在这两个df1df2

In [1046]: df1.columns.intersection(df2.columns) 
Out[1046]: Index([u'B', u'D'], dtype='object') 

列在df1不mns df2不在df1

In [1048]: df2.columns.difference(df1.columns) 
Out[1048]: Index([u'E'], dtype='object') 
+0

交集不起作用,我得到一个空的结果,看到我上面的编辑。这是因为有多个标题? – Moiraine24

+0

标题错了,现在我修复了它并解决了问题。谢谢! – Moiraine24