Python之高阶Pandas的使用(二)

本文介绍了Pandas的transform方法,强调了它与apply的区别,如返回值的尺寸和是否改变输入。通过实例展示了如何使用transform进行数据处理,包括计算分组平均值、对每个组进行自定义转换等。文章最后提供了一个复杂的数据分析任务,即根据销售数据找出每个城市每个子类别中销量占比top 50%的至多3个产品,并详细阐述了解决步骤和代码实现。
摘要由CSDN通过智能技术生成

transform

今天学习另一个内建方法transform,它与apply方法类似但稍有不同,主要表现在:

>transform可以产生一个标量值,并广播到各分组的尺寸数据中

>transform可以产生一个与输入分组size相同的对象

>transform不可改变它的输入

举例

df=pd.DataFrame({'key':['a','b','c']*3,               
                 'value':np.random.rand(9)})
df

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKp5ZKpXzEwNTM4NzY5,size_6,color_FFFFFF,t_70,g_se,x_16

按照key分组并求均值,也可以直接df.groupby("key").value.mean()

group=df.groupby('key').valuegroup.mean()

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKp5ZKpXzEwNTM4NzY5,size_8,color_FFFFFF,t_70,g_se,x_16

假如想产生一个Series(一维数组)和df['value']的尺寸一样,但值变为分组的均值,可以用匿名函数来完成

group.transform(lambda x:x.mean())

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKp5ZKpXzEwNTM4NzY5,size_8,color_FFFFFF,t_70,g_se,x_16

 类似于agg的聚合函数,transform可以直接传递一个字符串别名

group.transform('mean')

给每组的数都乘2

group.transform(lambda x:x*2)   #在原始数据df基础上每个*2

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKp5ZKpXzEwNTM4NzY5,size_10,color_FFFFFF,t_70,g_se,x_16

 如果对每个组降序排列

group.transform(lambda x:x.rank(ascending=False))  #升序就是True

定义一个函数将之前的分组进行转换:

def normalize(x):
     return (x-x.mean()) / x.std()   #数据标准化
group.transform(normalize)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZKp5ZKpXzEwNTM4NzY5,size_9,color_FFFFFF,t_70,g_se,x_16

 也可以用apply,这一点是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值