Python中的groupby分组

本文介绍了Python中DataFrame的groupby函数,用于对数据进行分组操作。内容包括单类和多类分组的使用示例,以及如何处理groupby结果的输出和转型,特别是将分组结果转化为DataFrame类型以便进行进一步的数据处理。
部署运行你感兴趣的模型镜像

Python中的groupby分组

一、groupby函数

groupby函数功能:对DataFrame进行分组(可单类分组,可多类分组)
需求:按“字段”列对数据data进行分组
groupby函数基本格式:data.groupby([‘分组字段’])

  • data:要分组的原始数据
  • 分组字段:分组参考的数据列名

举例:
原数据data:

  • 单类分组举例

根据“班级”进行分组:

import pandas as pd
data = pd.read_excel('/Users/ABC/Documents/工作簿1.xlsx')
for name, group in data.groupby(['班级']):
    num_g = group['班级'].count() # 获取组内记录数目
    print(name) # name为班级名称
    print(num_g)
    print(group) # group为每个分组中的记录情况
    print('---------------')

“班级”分组结果:
在这里插入图片描述

  • 多类分组举例
    根据“班级”和“科目”分组:
 import pandas as pd
data = pd.read_excel('/Users/ABC/Documents/工作簿1.xlsx')
for name, group in data.groupby(['班级','科目']):
    num_g = group['学号'].count() # 获取组内记录数目
    print(name) # name为班级名称
    print(num_g)
    print(group) # group为每个分组中的记录情况
    print('---------------')

“班级”和“科目”分组结果:
在这里插入图片描述

二、groupby结果对象输出与转型

2.1groupby迭代结果输出

groupby函数产生的结果是个迭代器,若打印输出data.groupby([‘分组字段’])的结果可能会运行处以下结果:
在这里插入图片描述

解决方法:

要输出具体的结果详情可以用for循环读取(参考上文举例中的代码),其中每个分组结果中包含 分组名称(上文举例代码中:name)和分组记录(上文举例代码中:group)

2.2分组记录- group转化为DataFrame类型

当需要对分组记录- group中的记录进行进一步操作时,发现常用的取列等操作报错

解决方法:

需要将分组记录-group转化为DataFrame类型

转化思路:
用group.values得到一个数组,再将数组用array.tolist()方法转化为列表,再用列表作为参数传入pd.DataFrame()方法中
注意:转化生成的DataFrame没有原数据的列名,需要用DataFrame.columns具体指定

举例:

import pandas as pd
data = pd.read_excel('/Users/ABC/Documents/工作簿1.xlsx')
for name, group in data.groupby(['班级']):
    list_group = group.values.tolist()# 将group.values数组转化为array.tolist()列表
    group_df = pd.DataFrame(list_group)# 将array.tolist()列表转化为DataFrame
    group_df.columns = ['学号', '姓名', '班级', '科目', '成绩']# 生成的DataFrame无原列名,而是默认的列索引,因此为DataFrame指定列名
    print(group_df)
    print(group_df['学号'])# DataFrame取列操作
    print('---------------')

运行结果:
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值