# 02. 数据分组整合之unique+groupby

发布时间 2023-07-01 00:05:47作者: Evzen

前几天帮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('------------------------程序已运行完成--------------------------------')