You can use loc for selecting Gender and nlargest, with parameter n, if you need more as one values:
n : int
Return this many descending sorted values
print data
Scores Gender
0 10 0
1 5 1
2 5 0
3 7 1
4 8 1
5 3 0
print data.loc[data['Gender']==1, 'Scores'].nlargest(n=3)
4 8
3 7
1 5
Name: Scores, dtype: int64
If you need only the highest score, use max, as mentioned Edchum in comment:
print data.loc[data['Gender']==1, 'Scores'].max()
8
Or use groupby by Gender with nlargest for all Gender:
print data.groupby('Gender')['Scores'].nlargest(n=2)
Gender
0 0 10
2 5
1 4 8
3 7
dtype: int64
If you need names, you can use merge by both indexes:
print data
Names Scores Gender
0 a 10 0
1 b 5 1
2 c 5 0
3 d 7 1
4 e 8 1
5 f 3 0
print data.groupby('Gender')['Scores'].nlargest(n=2).reset_index(level=0,name='Max')
Gender Max
0 0 10
2 0 5
4 1 8
3 1 7
df =pd.merge(data[['Names']],
data.groupby('Gender')['Scores'].nlargest(n=2).reset_index(level=0, name='Max'),
left_index=True,
right_index=True)
Names Gender Max
0 a 0 10
2 c 0 5
4 e 1 8
3 d 1 7
If you need only one Gender, use concat:
print data
Names Scores Gender
0 a 10 0
1 b 5 1
2 c 5 0
3 d 7 1
4 e 8 1
5 f 3 0
print data.loc[data['Gender']==1, 'Scores'].nlargest(n=2)
4 8
3 7
Name: Scores, dtype: int64
print pd.concat([data['Names'],
data.loc[data['Gender']==1, 'Scores'].nlargest(n=2)],
axis=1,
join='inner')
Names Scores
4 e 8
3 d 7
Or simplier solution is use loc again:
print data
Names Scores Gender
0 a 10 0
1 b 5 1
2 c 5 0
3 d 7 1
4 e 8 1
5 f 3 0
print data.loc[data['Gender'] == 1, 'Scores'].nlargest(n=2).index
Int64Index([4, 3], dtype='int64')
print data.loc[data.loc[data['Gender'] == 1,'Scores'].nlargest(n=2).index,['Names','Scores']]
Names Scores
4 e 8
3 d 7
data.loc[data['Gener']==1, 'Scores'].max()