如何使用if语句从Python中的两列读取?

时间:2016-03-16 10:13:26

标签: python csv pandas

我有一个名为students.csv的文件。有几列。我想对两列使用if语句,genderscores。我想展示得分最高的男生(按降序排列)。因此,我需要编写一个可以从csv文件中读取的脚本,并将这两列(性别和分数)结合起来。

我试图使用:

import pandas as pd

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

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

在这里,我给男生= 1,女生= 0。 但是,我不知道如何打印得分最高的男学生。

3 个答案:

答案 0 :(得分:1)

如果您需要更多作为一个值,则可以使用loc选择Gendernlargest,参数n

  

n :int

     

返回这么多降序排序值

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中提到的Edchum {/ 3}}:

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

Gender使用comment Gender print data.groupby('Gender')['Scores'].nlargest(n=2) Gender 0 0 10 2 5 1 4 8 3 7 dtype: int64 所有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

如果您需要姓名,可以Gender使用groupby

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

如果您只需要一个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 ,请使用nlargest

 findDialog->setModel(false);
 findDialog->show();

或者更简单的解决方案是再次使用merge

setModel(false);

答案 1 :(得分:1)

您也可以使用

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

答案 2 :(得分:1)

您可以在pandas中使用.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