首页 > 解决方案 > 如何通过另一个数据框中的键过滤数据框中的列

问题描述

我的第一个数据框是

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

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

标签: pythonpandas

解决方案


一个想法是将字典转换为一行DataFramemerge因为没有参数on它通过所有列名称的交集合并(在帮助器DataFrame中通过字典的键):

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.isin然后按and过滤DataFrame.loc:表示所有行:

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

推荐阅读