запрашивать столбцы pandas с циклом

#python #pandas #loops

#python #pandas #циклы

Вопрос:

у меня есть следующий df:

     country  sport  score
0   ita      swim   15 
1   fr       run    25
2   ger      golf   37
3   ita      run    17
4   fr       golf   58
5   fr       run    35
  

меня интересуют только некоторые элементы категорий:

 ctr = ['ita','fr']
sprt= ['run','golf']
  

я надеялся извлечь их чем-то подобным:

 df[(df['country']== x for x in ctr)amp;(df['sport']== x for x in sprt)]
  

но хотя он не выдает никакой ошибки, он возвращает empty..

есть предложения? я также пытался:

 df[(df['country']== {x for x in ctr})amp;(df['sport']== {x for x in sprt})]
  

Редактировать:

причина, по которой я хочу использовать цикл, заключается в том, что меня на самом деле интересуют 3 лучших результата каждой комбинации, которые я надеялся объединить:

 df1 = pd.concat(df[(df['country']== x for x in ctr)amp;(df['sport']== x for x in sprt)].sort_values(by=['score'],ascending=False).head(3))
  

Ответ №1:

Используйте double Series.isin для проверки членства:

 df1 = df[(df['country'].isin(ctr))amp;(df['sport'].isin(sprt))]
print (df1)
  country sport  score
1      fr   run     25
3     ita   run     17
4      fr  golf     58
5      fr   run     35

df2 = df1.sort_values('score', ascending=False).groupby(['country','sport']).head(3)
print (df2)
  country sport  score
4      fr  golf     58
5      fr   run     35
1      fr   run     25
3     ita   run     17
  

Комментарии:

1. привет, Израэль, да, извините, смотрите мою правку.. меня интересуют 3 вершины для каждой комбинации, поэтому я надеялся отсортировать, head () и объединить..

2. @lorenzo — Можете ли вы добавить больше данных в образец и добавить ожидаемый результат?

3. смотрите мою правку, она понятнее? что меня интересует, так это топ-3 каждой комбинации, а не только топ-3 абсолютных

4. как обычно, израэль, ты прав. большое вам спасибо! в этом случае, почему head() показывает заголовок каждого из них вместо верхних 3 заголовков сгруппированного df?

5. @lorenzo — Вам нужна проверка по парам? Какой ожидаемый результат от ваших выборочных данных? Потому что isin тестируйте как OR — ita или fr и запускайте или golf