鱼C论坛

 找回密码
 立即注册
查看: 1075|回复: 1

pandas的数据分箱方法cut

[复制链接]
发表于 2019-5-28 17:33:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
手头一组数据,需要进行相应的分组。。但是要求超出设定的极大极小值,则不参与分组,返回空值即可。
我原始的代码是
  1. for i in std_level:
  2.     #按配置文件的指标字段顺序一一对应,生成指定的指标数据表
  3.     #原标准等级数据,为单独的表格,为提升速度,特地将相对应的指标提取出来,保存为字典,方便快速读取
  4.     max_std,min_std,l_1,l_2,l_3,l_4,l_5 = std_level[i][0] #此处的[0]是因为字典的键值为二维列表,需去除一层中括号
  5.     def trans(x):
  6.             if min_std < x < l_5:
  7.                 return 6
  8.             elif l_5 <= x < l_4:
  9.                 return 5
  10.             elif l_4 <= x < l_3:
  11.                 return 4
  12.             elif l_3 <= x < l_2:
  13.                 return 3
  14.             elif l_2 <= x < l_1:
  15.                 return 2
  16.             elif l_1 <= x <= max_std:
  17.                 return 1
  18.             else:
  19.                 return np.NaN
  20.     data['%_level'%i] = data[i].apply(trans)
复制代码

个人感觉用pandas的cut方法,可能可以更快速地解决问题。。
我参照别人的方法,自己写了代码,但是由于部分数据位于极大极小值外,无法参与分组。。系统报错,不知道如何改进,求指点。
  1. for i in std_level:
  2.     max_std,min_std,l_1,l_2,l_3,l_4,l_5 = std_level[i][0]
  3.     bins = [min_std,l_5,l_4,l_3,l_2,l_1,max_std]
  4.     data['%s_level'%i] = pd.cut(data[i],bins,labels=[6,5,4,3,2,1])
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-29 09:04:01 | 显示全部楼层
我后面查了文档,设置了参数include_lowest = True,可以处理该问题了。。
但是,由于原始的分组数据中,每个级别的分组数据有重叠之处,比如指标a,其中的分组等级是[0.01,1.0,1.0,1.0,2.0]。这种情况下,分组会混乱。。。即使设置了参数duplicate = ‘drop’,貌似也不好搞。。
因为有的指标等级数据是各不相同的,可以完整地分出几组,而有的指标分组等级是重叠的,这样可能导致不同数据之间的等级数量是乱的,难以判断。
我想了半天,可能只能用最原始的办法,来处理了。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-16 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表