2016-03-16 32 views
4

我有一個文件叫students.csv。有幾列。我希望使用if語句表示兩列,即genderscores。我想要顯示得分最高的男生(按降序排列)。所以,我需要編寫一個腳本,可以從csv文件中讀取這些腳本並將這兩列(性別和分數)結合起來。如何使用if語句從Python中的兩列讀取?

我試着使用:

import pandas as pd 

data = pd.read_csv('students.csv') 

print(data[data["Gender"] == 1]) 

下面筆者就給男生= 1,女性= 0 但是,我不知道如何打印誰已經拿到了得分最高的男學生。

+0

你需要排序的過濾DF或者只是得到該列'data.loc的最大值[數據[ '根兒'] == 1, '分數'] MAX() ' – EdChum

回答

1

可以使用loc選擇Gendernlargest,與參數n,如果你需要更多的作爲一個價值觀:

ñ:整數

返回這麼多的降序排序值

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 

如果你只需要得分最高,使用max,如前所述Edchumcomment

print data.loc[data['Gender']==1, 'Scores'].max() 
8 

或者通過Gendernlargest使用groupby所有Gender

print data.groupby('Gender')['Scores'].nlargest(n=2) 
Gender 
0  0 10 
     2  5 
1  4  8 
     3  7 
dtype: int64 

如果你需要的名字,你可以indexes使用merge

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 

如果你只需要一個Gender,使用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 

或者simplier解決方案是再次使用loc

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 
+0

謝謝你們。我認爲最大的更適合我的工作。還有一件事,我可以將學生的姓名和成績一起添加嗎?我的意思是,我想顯示得分最高的學生的姓名。 –

+0

謝謝jezrael - 太棒了。因爲我只需要顯示男學生,我嘗試:DF = pd.merge(數據[[「名稱」]], 數據。groupby ['Gender'] == 1,我完成了劇本。但我不給我男學生! –

+0

答案已編輯,請檢查。如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)它。謝謝。 – jezrael

1

您還可以使用

pandas.DataFrame.sort_values(by='Scores') 
+0

非常感謝 –

1

你可以使用。 max()命令熊貓

import pandas as pd 

df = pd.read_csv("student.csv") 

data = df[df["Gender"]==1].max() 

print data 

輸出:

stud  daniel 
Gender  1 
marks  78 
dtype: object