关注公众号:数据科学专栏,回复"资料",领取精美资料。
摘要
Pandas包含多个内置函数,如sum、mean、max、min等,你可以将其应用于一个DataFrame或分组数据。然而,构建和使用自己定义的函数可以进一步了解如何利用Pandas进行数据分析。
加权平均数是一个很好的示例,因为它很容易理解,但在pandas中并不包含其公式。虽然在Pandas中构建加权平均函数相对简单,但是当与groupby等其他panda函数结合使用时非常有用。
为什么要使用加权平均
举一个简单的例子说明了为什么加权平均是一个有用的统计数据。下表显示了3个不同客户为同一产品支付的价格和数量:
顾客类型 |
鞋子价格/$ |
购买数量/双 |
土豪 |
300 |
20 |
小康 |
200 |
100 |
平民 |
150 |
225 |
如果有人问,鞋子的平均价格是多少?可能你会这么计算:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/29f99fa6440283c65bd7a73b47b3cc6a.png)
但是你仔细看看这些数字,你会发现以低于200美元的价格卖出的鞋子远远多于200美元以上的价格。因此,简单平均216.67美元并不能准确反映市场上的实际平均售价。
更有用的是根据购买的数量来衡量这些价格。做法是建立一个加权平均数模型,使平均鞋价更能代表所有顾客的购买模式。
计算如下:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/909ec2b3a4e80620d2f9f89f9905edfe.png)
这个数字比简单的平均价格显然更准确地反映了产品的总体平均价格。
如何在Pandas中计算加权平均呢
加权平均的数学概念很简单。因为我们需要值和权重,所以在对数据进行复杂分组时,在Panda中实现它可能不太直观。然而,一旦你算出来了,在很多不同的情况下使用加权平均是非常容易的。
接下来将使用一个虚拟的销售数据介绍Pandas中如何使用加权平均。
1、读取数据
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/2e1c219eeecd65f6504b7e97c0bada21.png)
查看下数据:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/2d9df17aa0de1e438a15142ca5434879.png)
在示例数据中,包括当前价格和数量以及预测的New_Product_Price。
简单平均:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/87ba136c0c191ba17726774ca1dbd1a0.png)
结果:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/8bf87e035b704bb31215a5d8dba26675.png)
加权平均:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/3b56101a4df35afa20b9a420cc8bc9c7.png)
结果:
-
当前:342.540687161$
-
新品:374.638336347$
加权平均公式不复杂,但冗长。当我们对数据进行分组时,它也很难使用。如果我们构建一个计算数据的函数,将会简单得多。
结合分组(GruopBy)等函数使用加权平均
定义一个自定义函数,该函数接受数据列的名称并计算加权平均值。然后,使用apply对分组的数据执行它。
Python代码:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/62a39be0406812f580fbd69a3605c441.png)
结果:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/0b3bc2f0a6fd9ed27e2693d7a1354a62.png)
说明:如果总权重中有一个0,我想返回简单的均值。你可以自己定义其他值。
也可以根据多个条件进行分组,该函数将确保在每个分组中使用正确的数据:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/2dc7b4d4e7814b04fc47e8677254426d.png)
结果:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/7a72506302658502beadbc504db2ebcf.png)
多个聚合及Numpy实现加权平均
1、多个聚合
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/b1ef6efab6fdcf36e3b0c66856f292b0.png)
结果:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/bbce6e583bb9c0be020ba38d5fc360aa.png)
多个聚合优点:对不同字段采用不同的函数分析结果。
2、组合label成一个新的有意义的Dataframe。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/3cbd551ec8e2b9487b31b71986621bcc.png)
结果(按销售经理看产品的销售价格):
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/a6549f52f9e6ca1b0b7460a9a55328e2.png)
3、numpy中如何实现加权平均?
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/2497697cfde98c70c8b0fa6f9693c430.png)
说明:numpy求平均操作中带有一个权重参数
4、对于Group之后的数据用lambda表达式实现加权平均。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/b9ed28ce3639a0b461d1298a9adfda3c.png)
参考:《Python数据科学手册》