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
原文地址:https://www.cnblogs.com/sunupo/p/12941713.html