Фильтрация информационного кадра pandas с использованием словаря для значений столбцов - PullRequest
0 голосов
/ 31 октября 2018

Предпосылка

Мне нужно использовать словарь в качестве фильтра для большого фрейма данных, где пары ключ-значение являются значениями в разных столбцах. Этот словарь получен из отдельного фрейма данных с использованием dict(zip(df.id_col, df.rank_col)), поэтому, если словарь не лучший способ, его можно изменить.

Это очень похоже на этот вопрос: Фильтрация кадра данных pandas по значениям из 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, поэтому фрейм данных урезан до:

enter image description here

Фактический исходный кадр данных составляет около 1M строк, а словарь -> 100 пар ключ-значение. Спасибо за любую помощь.

1 Ответ

0 голосов
/ 31 октября 2018

Вы можете проверить с помощью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...