Python 将数据帧行与键/值对的dict匹配

Python 将数据帧行与键/值对的dict匹配,python,pandas,profiling,Python,Pandas,Profiling,我希望做到以下几点: df.loc[(df["first_name"] == "joko") & (df["last_name"] == "widodo"), "are_you_joko"] 但是,在(df[“first_name”]=“joko”)和(df[“last_name”]=“widodo”)行中没有明确提供列名和值。相反,我想提供一个键/值对的dict,例如,{“first\u name”:“joko”,“last\u name”:“widodo”}。此外,我希望以最快的方

我希望做到以下几点:

df.loc[(df["first_name"] == "joko") & (df["last_name"] == "widodo"), "are_you_joko"]
但是,在(df[“first_name”]=“joko”)和(df[“last_name”]=“widodo”)行中没有明确提供列名和值。相反,我想提供一个键/值对的dict,例如,{“first\u name”:“joko”,“last\u name”:“widodo”}。此外,我希望以最快的方式完成这项工作。我目前正在使用以下工具

tf_df = pd.DataFrame([df[k] == v for k, v in record_dict.iteritems()]).all()
df.loc[:, "are_you_joko"] = tf_df

其中,记录的dict{“名字”:“joko”,“姓氏”:“widodo”}。如果有人知道任何更快的事情,我很感兴趣。谢谢

如果您的df很大,创建新的
数据帧可能需要时间和内存。我试过这样的东西,当
len(df)=100000时,它比你的机器快500多倍。如果你的
df
很小,我想没有什么区别

In [1]:

import pandas as pd
import numpy as np
​
df = pd.DataFrame(np.random.randint(3, size=(100000,5)), columns=list('ABCDE'))
​
record_dict = dict(A=1, B=2, C=1, D=2, E=1)
In [2]:

%%timeit 
tf_df = pd.DataFrame([df[k] == v for k, v in record_dict.iteritems()]).all()
1 loops, best of 3: 2.34 s per loop
In [3]:

%%timeit
msk = None
for k, v in record_dict.iteritems():
    if msk is None:
        msk = df[k] == v
    else:
        msk = msk & (df[k] == v)       
100 loops, best of 3: 4.14 ms per loop