Фильтруйте панд на основе парных условий - PullRequest
0 голосов
/ 23 февраля 2019

У меня проблемы с фильтрацией данных, используя результат условия groupby.Я уже пытался использовать маску с isin(), но она не возвращает только парные условия.

Предположим, у меня есть такой набор данных, как показано ниже:

    Dest    Origin  DepDelay
0   TPA     IAD     8.0
1   TPA     IAD     19.0
2   BWI     IND     8.0
4   BWI     IND     34.0
5   JAX     IND     25.0
6   LAS     IND     67.0
8   MCI     IND     2.0
10  MCO     IND     6.0
11  MCO     IND     94.0
... .... ... ...
7009710 ATL MSP     30.0

Я хочу отфильтровать этоиспользуя результат условия groupby, где я получил все 5 лучших маршрутов.Чтобы получить маршруты, я использовал этот код:

top_5_route = flights_df[flights_df['DepDelay'] > 0].groupby(['Origin', 'Dest'])['Dest'].size().nlargest(5).index.to_list()

top_5_route:

[('LAX', 'SFO'),
('DAL', 'HOU'),
('SFO', 'LAX'),
('ORD', 'LGA'),
('HOU', 'DAL')]

Я хочу отфильтровать этот фрейм данных на основе этих меток, чтобы получить только парные условиядля «Происхождение - Дест».Например, новый фрейм данных должен содержать только те значения, где origin LAX, а Dest SFO и другие парные условия.

Если я использую метод isin, dataframe также будет содержать значения LAX - SFO, LAX-HOU.Это не соответствует парному условию.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вы можете создать новый столбец под названием «Маршрут»:

flights_df['Route'] = flights_df['Origin'] + '-' + flights_df['Dest']

, а затем сгруппировать по маршруту, чтобы получить топ-5 задержанных маршрутов

top_5_route = flights_df[flights_df['DepDelay'] > 0.0].groupby('Route').size().nlargest(5)

Для фильтрации flights_dfна этих маршрутах:

flights_df[flights_df['Route'].isin(top_5_route.keys())]
0 голосов
/ 23 февраля 2019

IIUC, вам нужно отфильтровать строки, которые соответствуют вашему списку кортежей, используйте:

df.set_index(['Dest','Origin']).loc[top_5_route].reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...