python transform函数_如何理解pandas中的transform函数

transform函数一直没懂,直到看到这篇文章 UnderstandingtheTransformFunctioninPandas, 假设我们有下面的销售数据,有三个不同的 订单id (10001, 10005和10006),每个 订单id又含有多个产品。

import pandas as pd

df = pd.read_excel("sales_transactions.xlsx")

df

问题

每个订单中各个单品费用分布及占比

例如,订单10001总价$576.12,细分一下

B1-20000 = $235.83 or 40.9%

S1-27722 = $232.32 or 40.3%

B1-86481 = $107.97 or 18.7%

如果还是没看懂,直接看代码吧。通过代码理解,比看大邓唠叨更有效果。

Talk is cheep, show me your code

第一种方法-merge

如果熟悉pandas的话,应该先试图对dataframe进行groupby

df.groupby('order')['ext price'].sum()

Run

order

10001 576.12

10005 8185.49

10006 3724.49

Name: ext price, dtype: float64

现在的难点是如何将刚刚分析出的数据与原始数据加工到一起,因为新旧数据的长度是不一样的。

最直接的方法就是新建一个dataframe

order_total = df.groupby('order')['ext price'].sum().rename('Order_Total').reset_index()

df_1 = df.merge(order_total)

df_1['Percent_of_Order'] = df_1['ext price']/df_1['Order_Total']

df_1

第二种方法- transform

使用原始dataframe,让我们看看经过transform与groupby处理后,我们得到的都是什么

df.groupby('order')['ext price'].transform('sum')

Run

0 576.12

1 576.12

2 576.12

3 8185.49

4 8185.49

5 8185.49

6 8185.49

7 8185.49

8 3724.49

9 3724.49

10 3724.49

11 3724.49

Name: ext price, dtype: float64

我们发现得到的数据长度与groupby长度不同(长度是3),而与原始数据df的长度是一样的。

所以我们可以一行代码解决本文的问题

df["Percent_of_Order"] = df["ext price"] / df.groupby('order')["ext price"].transform('sum')

df

近期文章

pip安装问题解决办法​mp.weixin.qq.com计算社会经济学​mp.weixin.qq.com免费课《Python快速入门》​mp.weixin.qq.com初学Python常见异常错误​mp.weixin.qq.comPython 函数式编程指北,不只是面向对象哦​mp.weixin.qq.com一行pandas代码生成哑变量​mp.weixin.qq.com

课件获取方式,请在【公众号:大邓和他的python】后台回复关键词“20191014”

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值