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 |
[ ]: