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

2024-06-26 04:01:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能做到以下几点:

df.loc[(df["first_name"] == "joko") & (df["last_name"] == "widodo"), "are_you_joko"]

但是,没有在行中显式提供列名和值(df[“first_name”]==“joko”)&;(df[“last_name”]==“widodo”)。相反,我想提供键/值对的dict,例如,{“first_name”:“joko”,“last_name”:“widodo”}。另外,我想以最快的方式完成这项工作。我目前正在使用以下。在

^{pr2}$

其中,记录{“名字”:“joko”,“姓”:“widodo”}。如果有人知道得更快一些,我很感兴趣。谢谢!在


Tags: nameyoudf方式记录名字locare
1条回答
网友
1楼 · 发布于 2024-06-26 04:01:12

如果df很大,创建一个新的DataFrame可能需要时间和内存。我尝试过类似的方法,当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

相关问题 更多 >