火龙信奥
  • 首页
  • 课程
  • 题库
  • 打卡
    • 代码对战
    • 快速对战
  • 题单
  • 团队
  • 荣誉墙
  • 商城
  • 登录 / 注册

pandas dataframe对象的分组机制groupby

作者: 作者的头像   huolong , 时间:2023-09-24 11:38:42 , 所有人可见, 阅读  2

groupby的操作可以被分为3部分:

第一步,存储于series或DataFrame中的数据,根据不同的keys会被split(分割)为多个组。(这个分组可以按照不同的轴进行划分,axis=0按照行;axis=1按照列)

第二步,我们可以把函数例如mean等,apply在每一个组上,产生一个新的值。

第三步,函数产生的结果被combine(结合)为一个结果对象(result object)。

使用例子来看一下,创建一个dataframe对象:

import pandas as pd
import numpy as np 
df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'],
                   'key2' : ['one', 'two', 'one', 'two', 'one'], 
                   'data1' : np.random.randn(5), 
                   'data2' : np.random.randn(5)})
print(df)

看一下创建的df对象:

  key1 key2     data1     data2
0    a  one -1.124935 -1.714341
1    a  two -0.341428  0.097469
2    b  one -0.491872 -0.078691
3    b  two -0.112789 -0.613882
4    a  one  0.678358 -0.874833

下面我们进行第一步,按照key1作为关键字进行分组。需要分组的数据是data1。即对data1这个series进行分组,分组的关键字是key1列。

grouped = df['data1'].groupby(df['key1']) 看一下grouped的属性:

这个grouped变量是一个GroupBy object(分组对象)。实际上现在还没有进行任何计算。这个GroupBy object(分组对象)已经有了我们想要的信息,现在需要的是对于每一个group进行一些操作。例如,通过调用GroupBy的mean方法,我们可以计算每个组的平均值:

grouped.mean() 输出的结果如下:

key1
a    0.512433
b    0.464582
Name: data1, dtype: float64

总结一下:我们通过group key(分组键)对数据(a series)进行了聚合,这产生了一个新的Series,而且这个series的索引是key1列中不同的值,index(索引)的名字也是key1',因为我们使用了df['key1']。

—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com

©2026加盟我们 | 关于我们 | ACM课程 | 常见问题 | 成果墙 | 评测记录 | 浙ICP备2021013995号
在线画图 | OI WIki | 打字练习
火龙信奥
请输入登录信息


请完成安全验证
验证码底图 滑块
向右拖动滑块完成验证
请输入用户名 / 绑定的手机号码



请输入注册信息(手机号验证码注册)





验证码5分钟有效,60秒内不可重复获取,每日最多3次

微信登录

微信登录二维码

正在生成二维码...

账号已过期,请续期。
去续期

绑定手机号

📱

为了更好地保护您的账号安全,享受完整的平台服务

请您尽快绑定手机号码