zoukankan      html  css  js  c++  java
  • python自定义聚合函数,merge与transform的区别

    1.自定义聚合函数,结合agg使用

    2. 同时使用多个聚合函数

    3. 指定某一列使用某些聚合函数

    4.merge与transform使用

    import pandas as pd
        import numpy as np
        np.random.seed(1)
        dict_data = {
            'k1': ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'],
            'k2': ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D'],
            'data1': np.random.randint(1,10,8),
            'data2': np.random.randint(1,10,8)
        }
        df = pd.DataFrame(dict_data)
        print('df=
    ',df)
        df2 = df.groupby('k1').sum()
        # df2 = df.sum()
        print("df.groupby('k1').sum()
    ",df2)
    
        # 使用聚合函数
        def cus(df):
            return df.max()-df.min()
        # 默认列索引为列名。元组第0个元素‘Max’,‘mu_cus’为自定义列名称,第一个元素为聚合函数名称
        print("使用聚合函数1
    ",df.groupby('k1').agg(['sum',('Max','max'),('mu_cus',cus)]))
        # 制定某一列使用某个聚合函数, 元组不能用来重命名列名了,元组里面的函数,表示这一列将会执行的聚合函数
        print("使用聚合函数2
    ",df.groupby('k1').agg({'data1':('min', 'max'),'data2':'min'}))
    
        df3 = df.groupby('k1').sum().add_prefix('sum_')
        print('df3=
    ',df3)
        # 如果不使用add_prefix('sum_'),那么在merge时候data1余data2列名相同,会被自动重命名
        print('merge=
    ',pd.merge(df,df3,on='k1'))  
    
        transform_df = df.groupby('k1').transform(np.sum).add_prefix('sum_')
        print(transform_df)
        df[transform_df.columns]=transform_df  # transform_df.columns Index(['sum_k2', 'sum_data1', 'sum_data2'], dtype='object')
        # df[transform_df.columns.values]=transform_df  #等价,# transform_df.columns.values ['sum_k2', 'sum_data1', 'sum_data2']
       print(df) 
       exit()

    2.

    df=
       k1 k2  data1  data2
    0  a  A      6      3
    1  b  B      9      5
    2  c  C      6      6
    3  d  D      1      3
    4  a  A      1      5
    5  b  B      2      3
    6  c  C      8      5
    7  d  D      7      8
    df.groupby('k1').sum()
         data1  data2
    k1              
    a       7      8
    b      11      8
    c      14     11
    d       8     11
    使用聚合函数1
        data1            data2           
         sum Max mu_cus   sum Max mu_cus
    k1                                  
    a      7   6      5     8   5      2
    b     11   9      7     8   5      2
    c     14   8      2    11   6      1
    d      8   7      6    11   8      5
    使用聚合函数2
        data1     data2
         min max   min
    k1                
    a      1   6     3
    b      2   9     3
    c      6   8     5
    d      1   7     3
    df3=
         sum_data1  sum_data2
    k1                      
    a           7          8
    b          11          8
    c          14         11
    d           8         11
    merge=
       k1 k2  data1  data2  sum_data1  sum_data2
    0  a  A      6      3          7          8
    1  a  A      1      5          7          8
    2  b  B      9      5         11          8
    3  b  B      2      3         11          8
    4  c  C      6      6         14         11
    5  c  C      8      5         14         11
    6  d  D      1      3          8         11
    7  d  D      7      8          8         11
      sum_k2 sum_data1 sum_data2
    0     AA         7         8
    1     BB        11         8
    2     CC        14        11
    3     DD         8        11
    4     AA         7         8
    5     BB        11         8
    6     CC        14        11
    7     DD         8        11
      k1 k2  data1  data2 sum_k2 sum_data1 sum_data2
    0  a  A      6      3     AA         7         8
    1  b  B      9      5     BB        11         8
    2  c  C      6      6     CC        14        11
    3  d  D      1      3     DD         8        11
    4  a  A      1      5     AA         7         8
    5  b  B      2      3     BB        11         8
    6  c  C      8      5     CC        14        11
    7  d  D      7      8     DD         8        11
    
    Process finished with exit code 0
  • 相关阅读:
    ncnn 编译配置
    Android 配置 ncnn
    Android Studio 配置 OpenCV4+
    ROS catkin cheat sheet
    CMake 使用代理服务器
    Git设置代理服务器
    安卓assets处理
    【Android】Toast on non-UI thread
    高级语言编译和运行系统
    linux环境安装包方式
  • 原文地址:https://www.cnblogs.com/sunupo/p/12941713.html
Copyright © 2011-2022 走看看