python中groupby函数详解(非常容易懂)

python中groupby函数详解(非常容易懂)

一、groupby 能做什么?

python中groupby函数主要的作用是进行数据的分组以及分组后地组内运算!

对于数据的分组和分组运算主要是指groupby函数的应用,具体函数的规则如下:

df.groupby([df[属性],df[属性])(指分类的属性,数据的限定定语,可以有多个).mean()(对于数据的计算方式——函数名称)

举例如下:
print(df[“评分”].groupby([df[“地区”],df[“类型”]]).mean())
#上面语句的功能是输出表格所有数据中不同地区不同类型的评分数据平均值

二、单类分组

A.groupby("性别")

在这里插入图片描述
首先,我们有一个变量A,数据类型是DataFrame

想要按照【性别】进行分组

得到的结果是一个Groupby对象,还没有进行任何的运算。

describe()描述组内数据的基本统计量

A.groupby("性别").describe().unstack()

在这里插入图片描述

  • 只有数字类型的列数据才会计算统计

  • 示例里面数字类型的数据有两列 【班级】和【身高】

但是,我们并不需要统计班级的均值等信息,只需要【身高】,所以做一下小的改动:

A.groupby("性别")["身高"].describe().unstack()

在这里插入图片描述

unstack()索引重排

上面的例子里面用到了一个小的技巧,让运算结果更便于对比查看,感兴趣的同学可以自行去除unstack,比较一下显示的效果

三、多类分组

A.groupby( ["班级","性别"])

在这里插入图片描述
单独用groupby,我们得到的还是一个 Groupby 对象。

mean()组内均值计算

DataFrame的很多函数可以直接运用到Groupby对象上。
在这里插入图片描述
上图截自 pandas 官网 document,这里就不一一细说。

我们还可以一次运用多个函数计算:

A.groupby( ["班级","性别"]).agg([np.sum, np.mean, np.std]) # 一次计算了三个

在这里插入图片描述

agg()分组多个运算

四、时间分组

时间序列可以直接作为index,或者有一列是时间序列,差别不是很大。

这里仅仅演示,某一列为时间序列。

为A 新增一列【生日】,由于分隔符 “/” 的问题,我们查看列属性,【生日】的属性并不是日期类型
在这里插入图片描述

我们想做的是:
1、按照【生日】的【年份】进行分组,看看有多少人是同龄?

A["生日"] = pd.to_datetime(A["生日"],format ="%Y/%m/%d")  # 转化为时间格式
A.groupby(A["生日"].apply(lambda x:x.year)).count() # 按照【生日】的【年份】分组

在这里插入图片描述
进一步,我们想选拔:
2、同一年作为一个小组,小组内生日靠前的那一位作为小队长:
在这里插入图片描述

as_index=False 保持原来的数据索引结果不变

first() 保留第一个数据

Tail(n=1) 保留最后n个数据

再进一步:
3、想要找到哪个月只有一个人过生日

A.groupby(A["生日"].apply(lambda x:x.month),as_index=False)  # 到这里是按月分组
A.groupby(A["生日"].apply(lambda x:x.month),as_index=False).filter(lambda x: len(x)==1)

在这里插入图片描述

filter() 对分组进行过滤,保留满足()条件的分组

以上就是 groupby 最经常用到的功能了。

用 first(),tail()截取每组前后几个数据

用 apply()对每组进行(自定义)函数运算

用 filter()选取满足特定条件的分组

  • 61
    点赞
  • 518
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python,使用groupby函数对数据进行分组后,结果显示的是用于分组的列的值,并且对每个分组进行了聚合计算。根据引用和引用的示例代码,可以看到使用groupby后,输出的结果只显示了用于分组的列,而不显示最终的聚合计算结果。如果需要显示聚合计算结果,可以使用agg函数进行计算并指定需要的聚合函数,如sum、mean、std等。在引用的示例代码,通过agg函数一次计算了三个聚合函数,即sum、mean和std。在引用的示例代码,通过sum函数将分组后的结果进行求和,并显示了Line和NO.两列的聚合结果。所以,groupby的结果显示取决于你在代码使用的聚合函数和指定的列。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [详解pythongroupby函数通俗易](https://blog.csdn.net/weixin_29968283/article/details/112833627)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [【debug】Python pandas dataframe.groupby().sum不显示结果,只显示groupby的条件列](https://blog.csdn.net/weixin_44127624/article/details/125599269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值