(资料图)
前几天帮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 npimport pandas as pdimport 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("------------------------程序已运行完成--------------------------------")