在pandas DataFrame中搜索列

时间:2016-11-14 19:23:58

标签: python pandas numpy dataframe

我需要获取pandas DataFrame的列名,其中列与numpy数组中的列匹配。

示例

import numpy as np
import pandas as pd

x = pd.DataFrame( data=[[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]], columns=list('abc') )

y = np.array( x[['b','c']] )
y

y然后是DataFrame的第二和第三列:

array([[0, 1],
       [1, 0],
       [0, 0],
       [1, 1],
       [1, 0],
       [1, 1]])

如何获取y所在的x所在的列名?(在这种情况下 b c

我正在寻找类似的东西:

x[ x==y ].columns

pd.DataFrame(y).isin(x)

该示例受特征选择问题的驱动,取自the sklearn page

我正在使用numpy 1.11.1和pandas 0.18.1。

2 个答案:

答案 0 :(得分:5)

这是NumPy broadcasting -

的方法
x.columns[(x.values[...,None] == y[:,None]).all(0).any(1)]

答案 1 :(得分:1)

也许这个?

import numpy as np
import pandas as pd

x = pd.DataFrame( data=[[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]], columns=list('abc') )

y = np.array( x[['b','c']] )

for yj in y.T:
    for xj in x:
        if (all(x[xj] == yj)):
            print(xj)