使用字典为列值过滤熊猫数据框

时间:2018-10-31 14:34:28

标签: python pandas dictionary filter

前提

我需要使用字典作为大型数据框上的过滤器,其中键值对是不同列中的值。 该字典是使用dict(zip(df.id_col, df.rank_col))从单独的数据帧中获得的,因此,如果字典不是最好的选择,那么它随时可以更改。

这与以下问题非常相似:Filter a pandas dataframe using values from a dict,但从根本上(我认为)有所不同,因为我的字典包含列对值:

示例数据

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'}

对于此数据框df_x,我希望能够查看过滤器字典并将其应用于一组列,在此处为idRank,以便对数据框进行解析降至:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

您可以使用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