pandas分组的三大操作

pandas分组的三大操作

聚合

aggregate = 合并,聚集在一起 = agg( )

什么情况下进行使用:

1. 需要对某个对象使用多个函数时: gb.agg([ "函数1", “函数2”,…… ])
2. 需要使用自己定义的函数时
3. 针对不同的列名,使用不同的函数

使用的思路:

1. gb代表分组之后的对象 
 gb = df.groupby(["分组依据",……])["待操作的列表头类别", ……]  
 (这里不写具体的操作,因为要对在下面进行具体操作)
2. 形成DataFrame结构
3. 使用聚合函数操作的方法逐一在gb进行操作

针对不同的使用方法进行阐述:

  1. 对同一对象的不同类别应用全部使用相同的多个函数

     gb.agg( ["函数1", "函数2", "函数3",  ……] )
    

实战代码:

import pandas as pd 
path = r"F:\Python_Tensorflow_codes\001竞赛代码\joyful-pandas-master\data\learn_pandas.csv"
df = pd.read_csv(path, encoding="gbk")
gb = df.groupby("Gender")[["Height", "Weight"]]
print(gb.agg(["sum", "idxmax", "skew"]))

运行结果:

         Height                   Weight                 
            sum idxmax      skew     sum idxmax      skew
Gender                                                   
Female  21014.0     28 -0.219253  6469.0     28 -0.268482
Male     8854.9    193  0.437535  3929.0      2 -0.332393
  1. 对同一对象的不同类别使用不同的函数

     gb.agg({"列表头类别1" : ["函数1", "函数2",……],"列表头类别2" : [ 同上 ], …… })
    

代码实战:

print(gb.agg({"Height": ["mean", "max"], "Weight": "count"}))

运行结果:

           Height        Weight
             mean    max  count
Gender                         
Female  159.19697  170.2    135
Male    173.62549  193.9     54
  1. 对同一对象的不同类别使用相同的自定义函数

     gb.agg( 自定义 函数名 )
    

代码实战1:

print(gb.agg(lambda x:x.mean()-x.min()))

运行结果1:

          Height     Weight
Gender                     
Female  13.79697  13.918519
Male    17.92549  21.759259

代码实战2:

def my_func(s):
    res = "high"
    if s.mean() <= df[s.name].mean():
        res = "low"
    return res
gb.agg(my_func)

运行结果2:

       Height Weight
Gender              
Female    low    low
Male     high   high

聚合函数使用之后的对结果重命名:
只需要将上述函数的位置改写成元组元组的第一个元素为新的名字第二个位置为原来的函数,包括聚合字符串和自定义函数。
简化表达:

gb.agg( [(新名字,原来的函数) ,(新名字,原来的函数) ] )

代码实战3:

print(gb.agg([("range", lambda x:x.mean()-x.min()), ("my_sum", "sum")]))

运行结果3:

          Height              Weight        
           range   my_sum      range  my_sum
Gender                                      
Female  13.79697  21014.0  13.918519  6469.0
Male    17.92549   8854.9  21.759259  3929.0

代码实战4:

print(gb.agg([("my_new_func", my_func)]))

运行结果4:

            Height      Weight
       my_new_func my_new_func
Gender                        
Female         low         low
Male          high        high
  1. 对同一对象的不同类别使用不同的自定义函数
    使用方法:

     gb.agg({"列表头类别1":[自定义函数名1, ……]  , "列表头类别2":[ 自定义函数名2, ……] })
    

代码实战5:

print(gb.agg({'Height':[my_func,'max'], 'Weight':lambda x:x.mean()-x.min()}))

运行结果5:

        Height            Weight
       my_func    max   <lambda>
Gender                          
Female     low  170.2  13.918519
Male      high  193.9  21.759259

对上述代码进行一定的修改:

print(gb.agg({'Height':[my_func,'max'], 'Weight':("range",lambda x:x.mean()-x.min())}))

运行结果:

        Height            Weight
       my_func    max      range
Gender                          
Female     low  170.2  13.918519
Male      high  193.9  21.759259

注意:
中括号 [ ] 括起来的是 函数、类别
小括号 () 括起来后的是 (新函数名, 原函数名)
大括号 { key : value}针对的是 不同类别使用不同的函数

注意这3种符号的嵌套

变换

transform = 转换,变换,使……改变形态,使……改变外观(或性质)

变换函数的返回值同长度的序列

有一些内置的变换函数为 累计函数 :(cumcount / cumsum / cumprod / cummax / cummin)

使用方法:同 聚合函数使用方式一致。

代码实战:

 print(gb.transform(lambda x: (x - x.mean()) / x.std()).head())

运行结果:

     Height    Weight
0 -0.058760 -0.354888
1 -1.010925 -0.355000
2  2.167063  2.089498
3       NaN -1.279789
4  0.053133  0.159631

过滤

filter = 过滤 ( 进行组的筛选

过滤在分组中是对于组的过滤,而索引是对于行的过滤

代码实战:

print(gb.filter(lambda x: x.shape[0] > 100).head())

运行结果:

   Height  Weight
0   158.9    46.0
3     NaN    41.0
5   158.0    51.0
6   162.5    52.0
7   161.9    50.0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值