lorenzo
lorenzo

Reputation: 407

query pandas cols with loop

i have the following 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

i am interested in some elements of categories only:

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

i was hoping in something like this to extract them:

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

but while it doesn't throw any error it returns empty..

any suggestion? i also tried:

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

EDIT:

the reason why want to use a loop, is cos i am actually interested in the 3 top scores of each combination, which i hoped to concat:

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

Upvotes: 1

Views: 800

Answers (1)

jezrael
jezrael

Reputation: 862601

Use double Series.isin for check membership:

df1 = df[(df['country'].isin(ctr))&(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

Upvotes: 2

Related Questions