nyft01 2022-08-20 16:10 采纳率: 100%
浏览 274
已结题

本月收入决定下个月提成点数的函数写法

问题遇到的现象和发生背景

背景:本人想用python是想解决下办公自动化的问题。现在有一组时间序列数据,比如下图

img


现在是每人当月的revenue决定下个月的rate,100000以内,下个月的提成点是6%,rate=6%;如果100000到200000,那么下个月的提成点是10%,rate=10%;如果本月达到200000以上,那么下个月的提成点是14%。注意是下个月点数。本月的收入决定下个月的提成点数。现在想要用python pandas 编一个函数解决这个问题

  • 写回答

7条回答 默认 最新

  • PENGCM 2022-08-21 03:26
    关注
    # coding=utf-8
    import pandas as pd
    from datetime import date
    
    date = date.fromisoformat
    join = '-'.join
    
    
    def date2int(d: int) -> int:
        """将数字转换为日期格式,减去一个月,返回6位(YYYYMM)十进制整数。"""
        d = str(d)
        d = d[:4], d[4:], '01'
        d = date(join(d))  # 检验日期数据
        m = d.month - 1
        d = f'{d.year}{m:02}' if m else f'{d.year - 1}12'  # 检验月份
        return int(d)
    
    
    def rate(rv: float) -> float:
        """依据业绩返回提成比例,默认提成比例返回None"""
        if rv >= 200000:
            return 0.14
        if rv >= 100000:
            return 0.10
    
    
    def get_rate(tsr, row) -> float:
        """依据上个月业绩取提成比例,没有业绩返回默认提成比例"""
        if sr := tsr.get(date2int(row.time)):
            if rt := sr.get(row.sales):
                return rt
        return 0.06  # 100000以下的默认提成比例
    
    
    def set_rate(data) -> dict:
        """生成{time:{sales:rate}}数据结构,以优化提成比例的查找性能"""
        tsr = {}
        for row in data.itertuples():
            t = row.time
            sr = {row.sales: rate(row.revenue)}
            if tsr.setdefault(t, sr) is not sr:
                tsr[t].update(sr)
        return tsr
    
    
    def award(data):
        dt = data.T  # 数据转置,行轴
        tsr = set_rate(data)
        for row in data.itertuples():
            _rate = get_rate(tsr, row)
            dt[row.Index]['rate', 'award'] = _rate, _rate * row.revenue
        return dt.T
    
    
    if __name__ == '__main__':
        revenue = pd.read_excel(r'C:\pyt.xlsx')
        sales_award = award(revenue)
        print(sales_award)
    
    

    img


    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 创建了问题 8月20日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效