如何使用if语句在Python中读取两列数据?

2024-03-29 02:08:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试着用:

import pandas as pd

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

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

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


Tags: 文件csv脚本dataif语句gender学生
1条回答
网友
1楼 · 发布于 2024-03-29 02:08:34

您可以在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
网友
2楼 · 发布于 2024-03-29 02:08:34

如果需要多个值作为一个值,则可以使用^{}来选择Gender^{},并使用参数n

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

如果只需要最高分,请使用^{},如comment中提到的Edchum

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

或者使用^{}by Gender^{}表示所有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,请使用^{}

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
网友
3楼 · 发布于 2024-03-29 02:08:34

你也可以使用

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

相关问题 更多 >