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]})

 ABCQ
0113LI
11-14ZHANG
2105ZHANG
3216LI
4227WANG


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

 ABC
Q   
LINoneNoneNone
WANGNoneNoneNone
ZHANGNoneNoneNone

从这个例子可以看出,使用apply()处理的对象是一个个的类如DataFrame的数据表,然而agg()则每次只传入一列。

不过我觉得这一点区别在实际应用中分别并不大,因为Ipython的Out输出对于这两个函数几乎没有差别,不管是处理一列还是一表。

我觉得agg()有一点让我很开心就是他可以同时传入多个函数,简直不要太方便哈哈:


df.groupby('Q').agg(['mean','std','count','max'])

 ABC
 meanstdcountmaxmeanstdcountmaxmeanstdcountmax
Q            
LI1.50.707107221.00.000000214.52.12132026
WANG2.0NaN122.0NaN127.0NaN17
ZHANG1.00.00000021-0.50.707107204.50.70710725

Plotting

这个也是我刚刚学会的,groupby的plot简直不要太方便了:(不过这个例子选的不是很好)


%matplotlib inline
df.groupby('Q').agg(['mean','std','count','max']).plot(kind='bar')

<matplotlib.axes._subplots.AxesSubplot at 0x1133bd710>

Pandas之groupby( )用法笔记小结

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')

 BC
A  
11.03.0
21.06.0

PS:有个问题困扰好久了,怎么把multiindex对象变回原来的形式呢。如:

Multiindex格式如下:(a, b, c, ...),

indexcolumn
(a1,b1,c1)d1
(a2,b2,c2)d2

直接调用函数reset_index(),Multiindex中(a, b, c, ...)就变成columns了,index重置为(0,1,2,...), 如下:

index   column
0a1b1c1d1
1a2b2c2d2

来源:https://www.cnblogs.com/bjwu/p/8970818.html

标签:Pandas,groupby
0
投稿

猜你喜欢

  • 纯CSS图片预加载

    2009-10-28 18:40:00
  • python之列表推导式的用法

    2021-04-22 18:54:59
  • 浅谈Python的正则表达式

    2022-05-11 00:54:16
  • mysql between实现选取介于两个值之间的数据范围

    2024-01-26 13:28:18
  • R语言属性知识点总结及实例

    2022-06-28 04:39:02
  • 在Django中管理Users和Permissions以及Groups的方法

    2023-11-03 03:10:21
  • 基于Python 优化 MUI标题栏

    2022-10-31 17:12:49
  • 详细介绍在pandas中创建category类型数据的几种方法

    2023-01-13 15:40:57
  • Dreamweaver MX新功能试用:连续空格

    2008-01-06 21:03:00
  • JavaScript基于Ajax实现不刷新在网页上动态显示文件内容

    2024-05-06 10:08:38
  • Python进行区间取值案例讲解

    2021-10-23 15:17:34
  • django框架实现模板中获取request 的各种信息示例

    2023-08-31 05:16:41
  • python开发入门——列表生成式

    2023-03-05 03:52:21
  • 浅谈Django自定义模板标签template_tags的用处

    2023-03-13 11:21:08
  • pytorch: Parameter 的数据结构实例

    2022-10-19 22:28:22
  • Python利用Turtle绘制哆啦A梦和小猪佩奇

    2022-05-08 08:38:24
  • tensorflow之变量初始化(tf.Variable)使用详解

    2023-08-19 06:46:46
  • MySQL高级操作指令汇总

    2024-01-21 04:42:01
  • 利用PyQt5生成过年春联

    2023-05-23 21:14:22
  • python对常见数据类型的遍历解析

    2022-01-18 21:24:28
  • asp之家 网络编程 m.aspxhome.com