python 贴吧自动回复_盘一盘 Python 系列特别篇23之:分箱 cut

本文含  1852  字, 14  图表截屏 建议阅读  10  分钟 关注本公众号,回复 Python库 获取本篇资料 当要给连续数值型数据分箱成几个组,我们可以使用 上贴介绍的 qcut 函数,也可以使用本贴介绍的 cut 函数。两者的区别是:
  • qcut 分组后保证每组含有的数据几乎一样多,每组的边界会被反算出来

  • cut 自定义每组的边界,每组组含有的数据个数不同

首先引入要用到的工具包:
import pandas as pdimport numpy as npimport seaborn as snssns.set_style('whitegrid')
数据本贴继续使用 上贴的数据,回顾一下是 2018 年的销售数据。接下来用 info(), head(), tail() 几个函数来看看数据集的大小、行标签和列标签。
raw_df = pd.read_excel('sales.xlsx')raw_df.info()

c755ebf3d06bb0b526f0491b04d23506.png

raw_df.head(3).append(raw_df.tail(3))

12eee7383214f703baafa2a7253cd634.png

将其按 account number 和 name 分组,并对 ext price 加总得到:
df = raw_df.groupby(['account number', 'name'])['ext price'].sum().reset_index()df.inf()

9b5d4aaa1778945ddeceed8666f63352.png

df

d4387856225766592ab7cf2e313ffe5a.png

cut在实际案例中,可通过业务规则定义箱。就拿新加坡航空公司飞行会员计划,25,000 英里是银卡 (silver) 而 50,000 英里是金卡 (gold),并且它 不会根据数据的年度变化而变化。如果我们要定义箱边界 (25,000, 50,000),我们就不能使用 qcut 而是 cut 了,因为后者可以自定义箱边界。首先将数据分成四个箱,注意每个箱的上界和下界之差为 32,265。
pd.cut(df['ext price'], bins=4)

bb3b2f679b89259e6f50639a6b6442e4.png

我们来看看每组的分布,很显然每组含的数据个数分别是 12,5,2,1,都不一样。这就是 cut 和 qcut 最重要的差别。
pd.cut(df['ext price'], bins=4).value_counts()

c45530f065c0ef2c5dac7b5944aca274.png

接下来定义箱的确切边界,通过设置参数 bins 即可。

cut_labels_4 = ['silver', 'gold', 'platinum', 'diamond']cut_bins = [0, 70000, 100000, 130000, 200000]df['cut_ex1'] = pd.cut(df['ext price'], bins=cut_bins, labels=cut_labels_4)df.head()

70eb1065c2e3e6e556edb1000204fabc.png

此外我们还可以用 np.linspace() 函数来创建等距的箱,用 8 个箱来举例,那么 linspace() 函数第三个参数 (点数) 应该设置为 9。
pd.cut(df['ext price'], bins=np.linspace(0, 200000, 9))

355c1af27d95de7518aa8c459961bc6b.png

最后还有一个用于定义箱的方法,用 pd.interval_range()。该函数提供了很大的灵活性。例如,它可以设置边界区间的开闭,下例设置 close='left' 是说箱区间是左闭右开的。

pd.interval_range(start=0, freq=10000, end=200000, closed='left')

972d8ea2b9cdb73a568a05745c6b9f0a.png

看下 df 前五行的打印结果。需要注意的是,在使用 interval_range() 函数时,参数 labels 的设置被忽略了。 
interval_range = pd.interval_range(start=0, freq=10000, end=200000)df['cut_ex2'] = pd.cut(df['ext price'], bins=interval_range, labels=[1,2,3])df.head()

686d9b23d368c3670821ae46d46a021e.png

你学会用 cut 了吗?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果觉得好,关注、转发、在看三连发走起  666~~~

福利来一波~~~

关注公众号回复以下信息送免费资料
回复Jenkins 领取Jenkins学习资料回复Jmeter 领取Jmeter学习资料

回复Java   领取Java学习资料

回复Python 领取python入门资料

回复RobotFramework   领取RobotFramework 框架搭建资料

7e5f315632035aee13012454740c800e.png

你可能会喜欢

  • Jmeter关联系列_数据驱动中的业务逻辑关联

  • docker搭建接口自动化持续集成框架

  • python28:迷宫游戏最短路径算法

  • 4300 字Python列表使用总结,用心!

  • 盘一盘 Python 系列基础篇十一之 机器学习 Sklearn

  • 盘一盘 Python 系列特别篇二十之 天数计数|年限

  • Linux环境部署之ubuntu网络配置

  • 性能测试指标7:性能测试的阶段性工作

  • jmeter之对jar包进行调用

  • jmeter之爬取网络图片

  • 软件质量保障体系图

  • 研发过程中的测试工作

  • APP测试流程及测试点

  • WEB测试范围小结

测试交流,加我备注【测试交流】拉入交流群,更有不定期资料赠送,敬请期待

6b9f05407cb4434db3da2c6d9c6c12f9.png

本文转载自【公众号:王的机器

a56a03046be558e776e1bd888cf953da.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值