#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