Python自定义聚合函数merge与transform区别详解
1.自定义聚合函数,结合agg使用
2.同时使用多个聚合函数
3.指定某一列使用某些聚合函数
4.merge与transform使用
importpandasaspd importnumpyasnp 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) #使用聚合函数 defcus(df): returndf.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.columnsIndex(['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()
结果
df= k1k2data1data2 0aA63 1bB95 2cC66 3dD13 4aA15 5bB23 6cC85 7dD78 df.groupby('k1').sum() data1data2 k1 a78 b118 c1411 d811 使用聚合函数1 data1data2 sumMaxmu_cussumMaxmu_cus k1 a765852 b1197852 c14821161 d8761185 使用聚合函数2 data1data2 minmaxmin k1 a163 b293 c685 d173 df3= sum_data1sum_data2 k1 a78 b118 c1411 d811 merge= k1k2data1data2sum_data1sum_data2 0aA6378 1aA1578 2bB95118 3bB23118 4cC661411 5cC851411 6dD13811 7dD78811 sum_k2sum_data1sum_data2 0AA78 1BB118 2CC1411 3DD811 4AA78 5BB118 6CC1411 7DD811 k1k2data1data2sum_k2sum_data1sum_data2 0aA63AA78 1bB95BB118 2cC66CC1411 3dD13DD811 4aA15AA78 5bB23BB118 6cC85CC1411 7dD78DD811 Processfinishedwithexitcode0
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。