我的第一个数据框是
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
我似乎无法以一种体面的方式实现这一目标。
答案 0 :(得分:2)
一个想法是将字典转换为一行DataFrame
和merge
,因为没有参数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.isin
和DataFrame.loc
进行过滤,:
表示所有行:
df = df1.loc[:, df1.columns.isin(vals)]
print (df)
obj1 obj3
0 01 03
1 02 04