我需要使用字典作为大型数据框上的过滤器,其中键值对是不同列中的值。
该字典是使用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
,我希望能够查看过滤器字典并将其应用于一组列,在此处为id
和Rank
,以便对数据框进行解析降至:
实际的源数据帧大约为1M行,而字典为> 100个键值对。 感谢您的帮助。
答案 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