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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。