如何通过另一个数据框中的键过滤数据框中的列

时间:2020-01-06 10:47:34

标签: python pandas

我的第一个数据框是

obj1 obj2 obj3
 01   02   03
 02   03   04

另一个数据框是:

col1 col2 col3
obj1  M    N
obj2  M    T
obj3  M    N

我只希望第一个数据框中标记为

的列
{'col2':M, 'col3':N}

想要的结果是

obj1 obj3
 01   03
 02   04

我似乎无法以一种体面的方式实现这一目标。

1 个答案:

答案 0 :(得分:2)

一个想法是将字典转换为一行DataFramemerge,因为没有参数on通过所有列名的交集合并(在Helper DataFrame中通过字典键): / p>

d = {'col2':'M', 'col3':'N'}

vals = pd.DataFrame([d]).merge(df2)['col1']

或结合使用DataFrame.query和dict理解:

vals = df2.query(' & '.join(['{}=={}'.format(i,repr(j)) 
                              for i, j in d.items()]))['col1']

然后按Index.isinDataFrame.loc进行过滤,:表示所有行:

df = df1.loc[:, df1.columns.isin(vals)]
print (df)
  obj1 obj3
0   01   03
1   02   04