python自定义聚合函数,merge与transform的区别

Posted 懒惰的星期六

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于python自定义聚合函数,merge与transform的区别的主要内容,如果未能解决你的问题,请参考以下文章

加速自定义聚合函数

加速自定义聚合函数

SQL Server 中的自定义聚合函数 (concat)

使用 plsql 的用户定义的自定义聚合函数

使用 jOOQ 创建自定义聚合函数

60种特征工程操作:使用自定义聚合函数