Pandas之groupby( )用法笔记小结
作者:Byron_NG 发布时间:2023-03-03 15:58:24
groupby官方解释
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
Group series using mapper (dict or key function, apply given function to group, return result as series) or by a series of columns.
讲真的,非常不能理解pandas官方文档的这种表达形式,让人真的有点摸不着头脑,example给得又少,参数也不给得很清楚,不过没有办法,还是只能选择原谅他。
groupby我用过的用法
基本用法我这里就不呈现了,我觉得用过一次的人基本不会忘记,这里我主要写一下我用过的关系groupby函数的疑惑:
apply & agg
这个问题着实困扰了我很久,经过研究,找了一些可能帮助理解的东西。先举一个例子:
import pandas as pd
df = pd.DataFrame({'Q':['LI','ZHANG','ZHANG','LI','WANG'], 'A' : [1,1,1,2,2], 'B' : [1,-1,0,1,2], 'C' : [3,4,5,6,7]})
A | B | C | Q | |
---|---|---|---|---|
0 | 1 | 1 | 3 | LI |
1 | 1 | -1 | 4 | ZHANG |
2 | 1 | 0 | 5 | ZHANG |
3 | 2 | 1 | 6 | LI |
4 | 2 | 2 | 7 | WANG |
df.groupby('Q').apply(lambda x:print(x))
A B C Q
0 1 1 3 LI
3 2 1 6 LI
A B C Q
0 1 1 3 LI
3 2 1 6 LI
A B C Q
4 2 2 7 WANG
A B C Q
1 1 -1 4 ZHANG
2 1 0 5 ZHANG
df.groupby('Q').agg(lambda x:print(x))
0 1
3 2
Name: A, dtype: int64
4 2
Name: A, dtype: int64
1 1
2 1
Name: A, dtype: int64
0 1
3 1
Name: B, dtype: int64
4 2
Name: B, dtype: int64
1 -1
2 0
Name: B, dtype: int64
0 3
3 6
Name: C, dtype: int64
4 7
Name: C, dtype: int64
1 4
2 5
Name: C, dtype: int64
A | B | C | |
---|---|---|---|
Q | |||
LI | None | None | None |
WANG | None | None | None |
ZHANG | None | None | None |
从这个例子可以看出,使用apply()处理的对象是一个个的类如DataFrame的数据表,然而agg()则每次只传入一列。
不过我觉得这一点区别在实际应用中分别并不大,因为Ipython的Out输出对于这两个函数几乎没有差别,不管是处理一列还是一表。
我觉得agg()有一点让我很开心就是他可以同时传入多个函数,简直不要太方便哈哈:
df.groupby('Q').agg(['mean','std','count','max'])
A | B | C | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
mean | std | count | max | mean | std | count | max | mean | std | count | max | |
Q | ||||||||||||
LI | 1.5 | 0.707107 | 2 | 2 | 1.0 | 0.000000 | 2 | 1 | 4.5 | 2.121320 | 2 | 6 |
WANG | 2.0 | NaN | 1 | 2 | 2.0 | NaN | 1 | 2 | 7.0 | NaN | 1 | 7 |
ZHANG | 1.0 | 0.000000 | 2 | 1 | -0.5 | 0.707107 | 2 | 0 | 4.5 | 0.707107 | 2 | 5 |
Plotting
这个也是我刚刚学会的,groupby的plot简直不要太方便了:(不过这个例子选的不是很好)
%matplotlib inline
df.groupby('Q').agg(['mean','std','count','max']).plot(kind='bar')
<matplotlib.axes._subplots.AxesSubplot at 0x1133bd710>
MultiIndex
这个是困扰我最多的一个问题,因为如果我groupby的时候选择了两个level,之后的data总是呈现透视表的形式,如:
Muldf = df.groupby(['Q','A']).agg('mean')
print(Muldf)
B C
Q A
LI 1 1.0 3.0
2 1.0 6.0
WANG 2 2.0 7.0
ZHANG 1 -0.5 4.5
我开始甚至以为这应该不是dataframe,是一个我可能没注意过的一个东西,可是后来我发现,这不过是MultiIndex形式的一种dataframe罢了。
Muldf.B
Q A
LI 1 1.0
2 1.0
WANG 2 2.0
ZHANG 1 -0.5
Name: B, dtype: float64
如果要选择某一个index,用`xs()`函数:
Muldf.xs('LI')
B | C | |
---|---|---|
A | ||
1 | 1.0 | 3.0 |
2 | 1.0 | 6.0 |
PS:有个问题困扰好久了,怎么把multiindex对象变回原来的形式呢。如:
Multiindex格式如下:(a, b, c, ...),
index | column |
(a1,b1,c1) | d1 |
(a2,b2,c2) | d2 |
直接调用函数reset_index(),Multiindex中(a, b, c, ...)就变成columns了,index重置为(0,1,2,...), 如下:
index | column | |||
0 | a1 | b1 | c1 | d1 |
1 | a2 | b2 | c2 | d2 |
来源:https://www.cnblogs.com/bjwu/p/8970818.html
猜你喜欢
- 模块在python编程中的地位举足轻重,熟练运用模块可以大大减少代码量,以最少的代码实现复杂的功能。下面介绍一下在python编程中如何导入
- JavaScript: <script type="text/javascript"> var level1
- 博主最近需要做一个物流信息查询,就去网上搜索一个快递鸟的API接口,返回值是以JSON格式,只需要返回是转成数组就能轻松实现各种实例了。下图
- 一、场景浏览器访问淘宝,再访问天猫,继续访问1688......此时,浏览器中的cookie是什么状态?显然,包含上述3个网站的所有cook
- 一、卷积神经网络的概述卷积神经网络(ConvolutionalNeural Network,CNN)最初是为解决图像识别等问题设计的,CNN
- 最近用php进行文件目录信息读取,在网上弄到下面一段代码://获取指定目录下的文件列表//$path 指定的目录,默认为当前目录//$ifc
- PHP程序都要用MYSQL,如果没有MYSQL,就不能用它们.第一:配置数据库信息,改成自己所需的;第二:导入数据库;第三:安装wamp5
- sys模块在使用python开发脚本的时候,作为一个运维工具,或者是其他工具需要在接受用户参数运行时,这里就可以用到命令行传参的方式,可以给
- Python 类/对象Python 是一种面向对象的编程语言。Python 中的几乎所有东西都是对象,拥有属性和方法。类(Class)类似对
- 今日给大家分享一个Python读取Excel表格,同时采用表格中的数值画图柱状图和折线图,这里只需要几行代码便可以实。首先我们需要安装一个E
- <!--#include file="admin_Checkuser.asp"--> <%
- 目录1. 简介2. 示例代码13. 示例代码24. 启动异常1. 简介Gunicorn(Green Unicorn)是给Unix用的WSGI
- 1. 安装Opencv包pip install opvencv-python2.实现代码:视频转为图片:import cv2cap=cv2.
- 以发布目录为例:<OBJECT ID="agobjOraSession" RUNAT=&quo
- win2000注册表程序 regedt32.exe下面是解决IIS出现Active Server Pages错误&
- 当管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。毕竟,你的SQL Server系统被保护在防火墙里,而且还有
- 本篇文章的python版本为:什么是httphttp是一个应用层协议,准确的来说是基于TCP/IP4层网络协议中的传输层中的TCP应用层协议
- 前言大家都看过彩带飘落吧?这个在比较喜庆的场合是很常见的:还有“跑马灯”效果,听起来很陌生,其实很常见,下面的就是:来源:https://w
- RGB图像转灰度图RGB图像转换为灰度图时通常使用:进行转换,以下尝试通过其他对图像像素操作的方式将RGB图像转换为灰度图像。#includ
- 今天我们分享的主要目的就是通过在 Python 中使用命令行和配置文件来提高代码的效率Let's go!我们以机器学习当中的调参过程