吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1558|回复: 17
收起左侧

[讨论] python根据数字进行区间分类

[复制链接]
cqwcns 发表于 2020-12-31 12:56
以下代码实现根据工单时长,返回工单区间分类,功能已实现。
交流,对于这种做区间分类的,有没有更简更优写法,类似list,好像更方便后面修改维护代码。
请各位大佬指教。

[Python] 纯文本查看 复制代码
# 获得工单时长分类
def func_get_work_order_duration_class(x):
    if x <= 24:
        return '0-24小时'
    elif 24 < x < 48:
        return '24-48小时'
    elif 48 < x < 120:
        return '2-5天'
    elif 120 < x < 168:
        return '5-7天'
    elif 120 < x < 168:
        return '5-7天'
    elif 120 < x < 168:
        return '7-15天'
    elif 168 < x < 720:
        return '15-30天'
    else:
        return '大于30天'

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

一线码农 发表于 2020-12-31 13:08
本帖最后由 一线码农 于 2020-12-31 13:11 编辑

看错了adfd
袁昌旺 发表于 2020-12-31 13:16
cui_boran 发表于 2020-12-31 13:20
JuncoJet 发表于 2020-12-31 13:23
本帖最后由 JuncoJet 于 2020-12-31 13:31 编辑

[Python] 纯文本查看 复制代码
>>> a=[0,24,48,120,168]
>>> q=96
>>> for i in range(len(a)):
        if q<a[i]:
                print "%s-%s天"%(a[i-1]/24,a[i]/24)
                break
2-5天

结贴,给加分吧!

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
glocksheep + 1 + 1 不是很懂,但我知道很厉害

查看全部评分

平淡最真 发表于 2020-12-31 14:32
JuncoJet 发表于 2020-12-31 13:23
[mw_shl_code=python,true]>>> a=[0,24,48,120,168]
>>> q=96
>>> for i in range(len(a)):

没有大于30天
Cool_Breeze 发表于 2020-12-31 14:41
本帖最后由 Cool_Breeze 于 2020-12-31 14:48 编辑

这样不好吗?(代码又不长,又不是要写到几十年)计算机只需要进行几下判断就可以得出结果(这样的算法还不够优的吗?)!
天黑我隐身 发表于 2020-12-31 14:54

由于是区间判断,所以无法直接使用字典,可以用两个列表解决

from typing import Optional

def func_get_work_order_duration_class(x: int) -> Optional[str]:
    keys = [720, 168, 120, 48, 24, 0]
    values = ['大于30天', '7-30天', '5-7天', '2-5天', '24-48小时', '0-24小时']
    for index in range(len(keys)):
        if x > keys[index]:
            return values[index]

以后维护keysvalues列表只需要保持降序和对应关系正确即可。

xu741852 发表于 2020-12-31 15:09
就这几行,电脑执行很快,不需要简化了吧
rsnodame 发表于 2020-12-31 15:09
本帖最后由 rsnodame 于 2020-12-31 15:14 编辑

记得你数据是基于pandas的吧,pandas就是拿来做这个的呀。可直接搜 “pandas 区间处理”
https://blog.csdn.net/weixin_42060598/article/details/109642986
https://pandas.pydata.org/pandas ... api/pandas.cut.html

我这个只是简单写写。如果设计得好的话,labels应该也可以递推生成
[Python] 纯文本查看 复制代码
work_bins = [i*24 for i in [0,1,2,5,7,15,30,3000]]
pd.cut(your_data_series, bins=work_bins, labels=['0-24小时','24-48小时','2-5天','5-7天','7-15天','15-30天','大于30天'])

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!
JuncoJet + 3 + 1 又见pandas大神

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 10:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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