2018-05-25 gt-day 问题答案参考–pandas¶
[1]:
import pandas as pd
[4]:
import io
datas_csv = io.StringIO("""
学年,学号,科目,分数
2011-2012,1,Chinese,97
2011-2012,2,Chinese,80
2011-2012,3,Chinese,85
2011-2012,4,Chinese,86
2011-2012,5,Chinese,91
2011-2012,6,Chinese,79
2011-2012,7,Chinese,91
2011-2012,1,English,70
2011-2012,2,English,80
2011-2012,3,English,94
2011-2012,4,English,72
2011-2012,5,English,94
2011-2012,6,English,96
2011-2012,7,English,77
2011-2012,1,math,72
2011-2012,2,math,90
2011-2012,3,math,89
2011-2012,5,math,72
2011-2012,6,math,91
2011-2012,7,math,66
2011-2012,4,math,60
2012-2013,6,Chinese,95
2012-2013,1,Chinese,85
2012-2013,7,Chinese,83
2012-2013,3,Chinese,78
2012-2013,2,Chinese,76
2012-2013,5,Chinese,76
2012-2013,4,Chinese,72
2012-2013,5,English,95
2012-2013,2,English,91
2012-2013,6,English,90
2012-2013,4,English,86
2012-2013,3,English,78
2012-2013,1,English,72
2012-2013,7,English,72
2012-2013,5,math,94
2012-2013,7,math,94
2012-2013,3,math,92
2012-2013,4,math,89
2012-2013,1,math,88
2012-2013,2,math,76
2012-2013,6,math,70
""")
[5]:
df = pd.read_csv(datas_csv)
df
[5]:
| 学年 | 学号 | 科目 | 分数 | |
|---|---|---|---|---|
| 0 | 2011-2012 | 1 | Chinese | 97 |
| 1 | 2011-2012 | 2 | Chinese | 80 |
| 2 | 2011-2012 | 3 | Chinese | 85 |
| 3 | 2011-2012 | 4 | Chinese | 86 |
| 4 | 2011-2012 | 5 | Chinese | 91 |
| 5 | 2011-2012 | 6 | Chinese | 79 |
| 6 | 2011-2012 | 7 | Chinese | 91 |
| 7 | 2011-2012 | 1 | English | 70 |
| 8 | 2011-2012 | 2 | English | 80 |
| 9 | 2011-2012 | 3 | English | 94 |
| 10 | 2011-2012 | 4 | English | 72 |
| 11 | 2011-2012 | 5 | English | 94 |
| 12 | 2011-2012 | 6 | English | 96 |
| 13 | 2011-2012 | 7 | English | 77 |
| 14 | 2011-2012 | 1 | math | 72 |
| 15 | 2011-2012 | 2 | math | 90 |
| 16 | 2011-2012 | 3 | math | 89 |
| 17 | 2011-2012 | 5 | math | 72 |
| 18 | 2011-2012 | 6 | math | 91 |
| 19 | 2011-2012 | 7 | math | 66 |
| 20 | 2011-2012 | 4 | math | 60 |
| 21 | 2012-2013 | 6 | Chinese | 95 |
| 22 | 2012-2013 | 1 | Chinese | 85 |
| 23 | 2012-2013 | 7 | Chinese | 83 |
| 24 | 2012-2013 | 3 | Chinese | 78 |
| 25 | 2012-2013 | 2 | Chinese | 76 |
| 26 | 2012-2013 | 5 | Chinese | 76 |
| 27 | 2012-2013 | 4 | Chinese | 72 |
| 28 | 2012-2013 | 5 | English | 95 |
| 29 | 2012-2013 | 2 | English | 91 |
| 30 | 2012-2013 | 6 | English | 90 |
| 31 | 2012-2013 | 4 | English | 86 |
| 32 | 2012-2013 | 3 | English | 78 |
| 33 | 2012-2013 | 1 | English | 72 |
| 34 | 2012-2013 | 7 | English | 72 |
| 35 | 2012-2013 | 5 | math | 94 |
| 36 | 2012-2013 | 7 | math | 94 |
| 37 | 2012-2013 | 3 | math | 92 |
| 38 | 2012-2013 | 4 | math | 89 |
| 39 | 2012-2013 | 1 | math | 88 |
| 40 | 2012-2013 | 2 | math | 76 |
| 41 | 2012-2013 | 6 | math | 70 |
[3]:
# 问题1: 展示用户每一门课程的历史最高分数 (长格式展示)
df.groupby(['学号', '科目'])['分数'].max()
[3]:
学号 科目
1 Chinese 97
English 72
math 88
2 Chinese 80
English 91
math 90
3 Chinese 85
English 94
math 92
4 Chinese 86
English 86
math 89
5 Chinese 91
English 95
math 94
6 Chinese 95
English 96
math 91
7 Chinese 91
English 77
math 94
Name: 分数, dtype: int64
[4]:
# 问题1: 展示用户每一门课程的历史最高分数 (宽格式(透视)展示)
pd.pivot_table(df, index='学号', columns='科目', values='分数', aggfunc=max)
[4]:
| 科目 | Chinese | English | math |
|---|---|---|---|
| 学号 | |||
| 1 | 97 | 72 | 88 |
| 2 | 80 | 91 | 90 |
| 3 | 85 | 94 | 92 |
| 4 | 86 | 86 | 89 |
| 5 | 91 | 95 | 94 |
| 6 | 95 | 96 | 91 |
| 7 | 91 | 77 | 94 |
[5]:
# 问题2: 以学年, 学号, 科目排序
df.sort_values(['学年', '学号', '科目'])
[5]:
| 学年 | 学号 | 科目 | 分数 | |
|---|---|---|---|---|
| 0 | 2011-2012 | 1 | Chinese | 97 |
| 7 | 2011-2012 | 1 | English | 70 |
| 14 | 2011-2012 | 1 | math | 72 |
| 1 | 2011-2012 | 2 | Chinese | 80 |
| 8 | 2011-2012 | 2 | English | 80 |
| 15 | 2011-2012 | 2 | math | 90 |
| 2 | 2011-2012 | 3 | Chinese | 85 |
| 9 | 2011-2012 | 3 | English | 94 |
| 16 | 2011-2012 | 3 | math | 89 |
| 3 | 2011-2012 | 4 | Chinese | 86 |
| 10 | 2011-2012 | 4 | English | 72 |
| 20 | 2011-2012 | 4 | math | 60 |
| 4 | 2011-2012 | 5 | Chinese | 91 |
| 11 | 2011-2012 | 5 | English | 94 |
| 17 | 2011-2012 | 5 | math | 72 |
| 5 | 2011-2012 | 6 | Chinese | 79 |
| 12 | 2011-2012 | 6 | English | 96 |
| 18 | 2011-2012 | 6 | math | 91 |
| 6 | 2011-2012 | 7 | Chinese | 91 |
| 13 | 2011-2012 | 7 | English | 77 |
| 19 | 2011-2012 | 7 | math | 66 |
| 22 | 2012-2013 | 1 | Chinese | 85 |
| 33 | 2012-2013 | 1 | English | 72 |
| 39 | 2012-2013 | 1 | math | 88 |
| 25 | 2012-2013 | 2 | Chinese | 76 |
| 29 | 2012-2013 | 2 | English | 91 |
| 40 | 2012-2013 | 2 | math | 76 |
| 24 | 2012-2013 | 3 | Chinese | 78 |
| 32 | 2012-2013 | 3 | English | 78 |
| 37 | 2012-2013 | 3 | math | 92 |
| 27 | 2012-2013 | 4 | Chinese | 72 |
| 31 | 2012-2013 | 4 | English | 86 |
| 38 | 2012-2013 | 4 | math | 89 |
| 26 | 2012-2013 | 5 | Chinese | 76 |
| 28 | 2012-2013 | 5 | English | 95 |
| 35 | 2012-2013 | 5 | math | 94 |
| 21 | 2012-2013 | 6 | Chinese | 95 |
| 30 | 2012-2013 | 6 | English | 90 |
| 41 | 2012-2013 | 6 | math | 70 |
| 23 | 2012-2013 | 7 | Chinese | 83 |
| 34 | 2012-2013 | 7 | English | 72 |
| 36 | 2012-2013 | 7 | math | 94 |
[6]:
# 问题3: 以学年, 科目, 学号排序
df.sort_values(['学年', '科目', '学号'])
[6]:
| 学年 | 学号 | 科目 | 分数 | |
|---|---|---|---|---|
| 0 | 2011-2012 | 1 | Chinese | 97 |
| 1 | 2011-2012 | 2 | Chinese | 80 |
| 2 | 2011-2012 | 3 | Chinese | 85 |
| 3 | 2011-2012 | 4 | Chinese | 86 |
| 4 | 2011-2012 | 5 | Chinese | 91 |
| 5 | 2011-2012 | 6 | Chinese | 79 |
| 6 | 2011-2012 | 7 | Chinese | 91 |
| 7 | 2011-2012 | 1 | English | 70 |
| 8 | 2011-2012 | 2 | English | 80 |
| 9 | 2011-2012 | 3 | English | 94 |
| 10 | 2011-2012 | 4 | English | 72 |
| 11 | 2011-2012 | 5 | English | 94 |
| 12 | 2011-2012 | 6 | English | 96 |
| 13 | 2011-2012 | 7 | English | 77 |
| 14 | 2011-2012 | 1 | math | 72 |
| 15 | 2011-2012 | 2 | math | 90 |
| 16 | 2011-2012 | 3 | math | 89 |
| 20 | 2011-2012 | 4 | math | 60 |
| 17 | 2011-2012 | 5 | math | 72 |
| 18 | 2011-2012 | 6 | math | 91 |
| 19 | 2011-2012 | 7 | math | 66 |
| 22 | 2012-2013 | 1 | Chinese | 85 |
| 25 | 2012-2013 | 2 | Chinese | 76 |
| 24 | 2012-2013 | 3 | Chinese | 78 |
| 27 | 2012-2013 | 4 | Chinese | 72 |
| 26 | 2012-2013 | 5 | Chinese | 76 |
| 21 | 2012-2013 | 6 | Chinese | 95 |
| 23 | 2012-2013 | 7 | Chinese | 83 |
| 33 | 2012-2013 | 1 | English | 72 |
| 29 | 2012-2013 | 2 | English | 91 |
| 32 | 2012-2013 | 3 | English | 78 |
| 31 | 2012-2013 | 4 | English | 86 |
| 28 | 2012-2013 | 5 | English | 95 |
| 30 | 2012-2013 | 6 | English | 90 |
| 34 | 2012-2013 | 7 | English | 72 |
| 39 | 2012-2013 | 1 | math | 88 |
| 40 | 2012-2013 | 2 | math | 76 |
| 37 | 2012-2013 | 3 | math | 92 |
| 38 | 2012-2013 | 4 | math | 89 |
| 35 | 2012-2013 | 5 | math | 94 |
| 41 | 2012-2013 | 6 | math | 70 |
| 36 | 2012-2013 | 7 | math | 94 |
[7]:
# 问题4: 以学年, 科目, 分数排序
df.sort_values(['学年', '科目', '分数'])
[7]:
| 学年 | 学号 | 科目 | 分数 | |
|---|---|---|---|---|
| 5 | 2011-2012 | 6 | Chinese | 79 |
| 1 | 2011-2012 | 2 | Chinese | 80 |
| 2 | 2011-2012 | 3 | Chinese | 85 |
| 3 | 2011-2012 | 4 | Chinese | 86 |
| 4 | 2011-2012 | 5 | Chinese | 91 |
| 6 | 2011-2012 | 7 | Chinese | 91 |
| 0 | 2011-2012 | 1 | Chinese | 97 |
| 7 | 2011-2012 | 1 | English | 70 |
| 10 | 2011-2012 | 4 | English | 72 |
| 13 | 2011-2012 | 7 | English | 77 |
| 8 | 2011-2012 | 2 | English | 80 |
| 9 | 2011-2012 | 3 | English | 94 |
| 11 | 2011-2012 | 5 | English | 94 |
| 12 | 2011-2012 | 6 | English | 96 |
| 20 | 2011-2012 | 4 | math | 60 |
| 19 | 2011-2012 | 7 | math | 66 |
| 14 | 2011-2012 | 1 | math | 72 |
| 17 | 2011-2012 | 5 | math | 72 |
| 16 | 2011-2012 | 3 | math | 89 |
| 15 | 2011-2012 | 2 | math | 90 |
| 18 | 2011-2012 | 6 | math | 91 |
| 27 | 2012-2013 | 4 | Chinese | 72 |
| 25 | 2012-2013 | 2 | Chinese | 76 |
| 26 | 2012-2013 | 5 | Chinese | 76 |
| 24 | 2012-2013 | 3 | Chinese | 78 |
| 23 | 2012-2013 | 7 | Chinese | 83 |
| 22 | 2012-2013 | 1 | Chinese | 85 |
| 21 | 2012-2013 | 6 | Chinese | 95 |
| 33 | 2012-2013 | 1 | English | 72 |
| 34 | 2012-2013 | 7 | English | 72 |
| 32 | 2012-2013 | 3 | English | 78 |
| 31 | 2012-2013 | 4 | English | 86 |
| 30 | 2012-2013 | 6 | English | 90 |
| 29 | 2012-2013 | 2 | English | 91 |
| 28 | 2012-2013 | 5 | English | 95 |
| 41 | 2012-2013 | 6 | math | 70 |
| 40 | 2012-2013 | 2 | math | 76 |
| 39 | 2012-2013 | 1 | math | 88 |
| 38 | 2012-2013 | 4 | math | 89 |
| 37 | 2012-2013 | 3 | math | 92 |
| 35 | 2012-2013 | 5 | math | 94 |
| 36 | 2012-2013 | 7 | math | 94 |
[ ]: