选择DataFrame之间的补码列

时间:2018-11-01 06:05:41

标签: python pandas dataframe

说我有一个pandas.DataFrame xx被提供给函数filter并返回了y,从x中删除了一些列的DataFrame 。该函数是一个黑匣子,列号很大。我如何找到“ x”中已删除的列?

或者,y.columnsx.columns的子集,我怎么能找到x中不在y中的列?

示例:

x = pd.DataFrame(np.array([[1,2,3],[4,5,6]]))
x.columns = list('abc')
y = x.iloc[:, :2].copy()
>>> x
   a  b  c
0  1  2  3
1  4  5  6
>>> y
   a  b
0  1  2
1  4  5

我想返回列c

我现在的解决方案:

>>> xc = x.columns.values.tolist()
>>> yc = y.columns.values.tolist()
>>> diff = [i for i in xc if i not in yc]
>>> x[diff]
   c
0  3
1  6

是否可以在不提取列名的情况下获得结果?

我以为这是某种基本操作,但是我找不到在线简单的答案。

谢谢。

3 个答案:

答案 0 :(得分:0)

sets或熊猫difference用作:

x[x.columns.difference(y.columns)]

或者:

x[list(set(x.columns)-set(y.columns))]

这将给出x数据框中的列值,而不是y数据框中的列值。


print(x[x.columns.difference(y.columns)])

或:

print(x[list(set(x.columns)-set(y.columns))])

   c
0  3
1  6

答案 1 :(得分:0)

使用sets

x_col = set(x.columns)
y_col = set(y.columns)
x_col.difference(y_col)
>>{'c'}

x_col.difference(y_col)将返回仅存在于x_col中但不存在于y_col

中的元素

答案 2 :(得分:0)

您可以使用numpy

import numpy as np

diff = np.setdiff1d(xc,yc)

OR

但是,使用本机方法总是很好的:

diff = list(xc - yc)