使用字典过滤 pandas 数据框的列值

BAC*_*C83 2 python dictionary filter pandas

前提

我需要使用字典作为大型数据帧的过滤器,其中键值对是不同列中的值。该字典是从单独的数据帧获取的,dict(zip(df.id_col, df.rank_col))因此如果字典不是最好的方法,则可以进行更改。

这与这个问题非常相似:使用字典中的值过滤熊猫数据框,但从根本上(我认为)不同,因为我的字典包含列配对值:

示例数据

df_x = pd.DataFrame({'id':[1,1,1,2,2,2,3,3,3], 
'B':[1,1,1,0,1,0,1,0,1], 'Rank':['1','2','3','1', '2','3','1','2','3'],'D':[1,2,3,4,5,6,7,8,9]})
filter_dict = {'1':'1', '2':'3', '3':'2'}
Run Code Online (Sandbox Code Playgroud)

对于这个数据框,df_x我希望能够查看过滤器字典并将其应用于一组列,此处idRank,因此数据框被削减为:

在此输入图像描述

实际的源数据帧大约有 1M 行,字典有 >100 个键值对。谢谢你的帮助。

WeN*_*Ben 5

您可以检查isin

df_x[df_x[['id','Rank']].astype(str).apply(tuple,1).isin(filter_dict.items())]
Out[182]: 
   id  B Rank  D
0   1  1    1  1
5   2  0    3  6
7   3  0    2  8
Run Code Online (Sandbox Code Playgroud)