transform
今天学习另一个内建方法transform,它与apply方法类似但稍有不同,主要表现在:
>transform可以产生一个标量值,并广播到各分组的尺寸数据中
>transform可以产生一个与输入分组size相同的对象
>transform不可改变它的输入
举例
df=pd.DataFrame({'key':['a','b','c']*3,
'value':np.random.rand(9)})
df
按照key分组并求均值,也可以直接df.groupby("key").value.mean()
group=df.groupby('key').valuegroup.mean()
假如想产生一个Series(一维数组)和df['value']的尺寸一样,但值变为分组的均值,可以用匿名函数来完成
group.transform(lambda x:x.mean())
类似于agg的聚合函数,transform可以直接传递一个字符串别名
group.transform('mean')
给每组的数都乘2
group.transform(lambda x:x*2) #在原始数据df基础上每个*2
如果对每个组降序排列
group.transform(lambda x:x.rank(ascending=False)) #升序就是True
定义一个函数将之前的分组进行转换:
def normalize(x):
return (x-x.mean()) / x.std() #数据标准化
group.transform(normalize)
也可以用apply,这一点是一样的