I found this to be almost as fast as using query and you don't need to create a string.
df[df.apply(lambda r : all(r[t]==m for t,m in your_dict.items()), axis=1)]