码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-05-23 13:21:08      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:efi   pre   agg   dataframe   seed   roc   class   元素   turn   

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=\n,df)
    df2 = df.groupby(k1).sum()
    # df2 = df.sum()
    print("df.groupby(‘k1‘).sum()\n",df2)

    # 使用聚合函数
    def cus(df):
        return df.max()-df.min()
    # 默认列索引为列名。元组第0个元素‘Max’,‘mu_cus’为自定义列名称,第一个元素为聚合函数名称
    print("使用聚合函数1\n",df.groupby(k1).agg([sum,(Max,max),(mu_cus,cus)]))
    # 制定某一列使用某个聚合函数, 元组不能用来重命名列名了,元组里面的函数,表示这一列将会执行的聚合函数
    print("使用聚合函数2\n",df.groupby(k1).agg({data1:(min, max),data2:min}))

    df3 = df.groupby(k1).sum().add_prefix(sum_)
    print(df3=\n,df3)
    # 如果不使用add_prefix(‘sum_‘),那么在merge时候data1余data2列名相同,会被自动重命名
    print(merge=\n,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的区别

标签:efi   pre   agg   dataframe   seed   roc   class   元素   turn   

原文地址:https://www.cnblogs.com/sunupo/p/12941713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!