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