前几天帮L师兄处理数据的时候,遇到了这样的问题:
我目前有如下的数据表格(假设数据举例):但是在实际对数据进行异常点的检测时,我们需要针对不同的班级、不同的科目来进行。所以会需要进行数据的分组与整合。
班级 | 科目 | 分数 |
---|---|---|
1班 | 语文 | 39.79778 |
2班 | 数学 | 5.846467 |
2班 | 英语 | 6.386726 |
3班 | 数学 | 68.92978 |
1班 | 数学 | 91.70355 |
3班 | 英语 | 5.590154 |
2班 | 语文 | 95.36453 |
1班 | 英语 | 62.11803 |
3班 | 语文 | 24.62038 |
为了便于分组和整合,在举例数据中特地模糊了姓名这一特征
提取思路:首先获取列中不重复的数据(unique),例如科目
中的不重复数据为语文
,数学
,英语
,再通过不重复数据作为索引去获取相关的行数据(groupby)。当我们需要针对不同的班级、不同的科目时,我们可以先对班级分组数据,再拿获取到的数据再进行分组,在代码中的表现就是循环中嵌套循环。
实现代码如下:
# %%
# 运行之前需要关掉与程序有关的excel文件
import numpy as np
import pandas as pd
import os
#conding=utf8
data = pd.read_excel('成绩单.xlsx')
# 按班级
clas=data['班级'].unique()
for c in clas:
print('班级'+clas)
cla=data.groupby(['班级']).get_group(c)
suject=cla['科目'].unique()
# 按科目
for s in suject:
print('科目为'+s)
data_output=cla.groupby(['科目']).get_group(s)
# 输出分组结果
print(data_output)
# %%
print('------------------------程序已运行完成--------------------------------')