Фильтрация фрейма данных pandas путем сопоставления строк в другом фрейме данных

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь получить строки из моего фрейма данных, которые соответствуют заданной комбинации недели и года

 df = pd.DataFrame({'Year':[2020, 2020, 2019, 2019, 2019, 2020],
              'Week':[1, 2, 4, 5, 2, 4],
              'other data':[5, 5, 5, 5, 5, 5]})

wks = pd.DataFrame({'Year':[2020,2020,2019], 'Week':[1, 2, 4]}) 
  

Я хочу иметь возможность использовать wks для сохранения строк в df, которые соответствуют этим комбинациям неделя / год, поэтому результат будет:

    Year  Week  other data
0  2020     1           5
1  2020     2           5
5  2020     4           5
  

Я попробовал .loc следующим образом, но это просто проверяет каждый столбец по отдельности (в этом примере возвращается весь df), вместо того, чтобы возвращать только там, где совпадают год и неделя.

 df.loc[df['Week'].isin(wks['Week']) amp; (df['Year'].isin(wks['Year']))]
  

Любая помощь с благодарностью 🙂

Ответ №1:

Используйте df.merge :

 In [816]: wks.merge(df, on=['Year', 'Week'])
Out[816]: 
   Year  Week  other data
0  2020     1           5
1  2020     2           5
2  2019     4           5