言愚者 2020-11-27 14:03 采纳率: 100%
浏览 376
已结题

根据员工在职明细表,统计2020年每月在职人数

给出一个表格,包括员工号、员工姓名、入职日期、离职日期。

统计2020年每个月在职人数。

 

建议用Python给出核心业务代码。

  • 写回答

3条回答 默认 最新

  • 清风未明月 2020-12-03 13:50
    关注

    Excel表:

    输出结果:

    代码(请自行删除中间的输出):

    import xlrd
    
    
    class Read_Ex():
        def read_excel(self):
            # 打开excel表,填写路径
            book = xlrd.open_workbook("worker.xlsx")  # Excel文件名
            # 找到sheet页
            table = book.sheet_by_name("Sheet1")
            # 获取总行数总列数
            row_Num = table.nrows
            col_Num = table.ncols
    
            s = []
            key = table.row_values(0)  # 这是第一行数据,作为字典的key值
    
            if row_Num <= 1:
                print("没数据")
            else:
                j = 1
                for i in range(row_Num - 1):
                    d = {}
                    values = table.row_values(j)
                    for x in range(col_Num):
                        # 把key值对应的value赋值给key,每行循环
                        d[key[x]] = values[x]
                    j += 1
                    # 把字典加到列表中
                    s.append(d)
                return s
    
    
    def count(work):  # 统计每个月在职人数
        k = 0
        for m, v in work.items():
            if star <= k and end > k:
                v = v + 1
                work[m] = v
                print(m, v)
            k += 1
    
    
    def on_the_job(i):  # 计算某个员工在职的月份
        star = 0  # 在职月份
        end = 0  # 离职月份
        star_year = int(i['入职日期'][0:4])
        star_month = int(i['入职日期'][5:7])
        if (i['离职日期']):
            end_year = int(i['离职日期'][0:4])
            end_month = int(i['离职日期'][5:7])
        else:
            end_year = 0
            end_month = 0
        if star_year < 2020:
            if end_year:
                if end_year == 2020:
                    end += end_month
            else:
                end += 12
        elif star_year == 2020:
            star += star_month - 1
            if end_year:
                if end_year == 2020:
                    end += end_month
            else:
                end += 12
        return star, end
    
    
    if __name__ == '__main__':
        work = {'Jan': 0, 'Feb': 0, 'Mar': 0, 'Apr': 0, 'May': 0, 'Jun': 0, 'Jul': 0, 'Aug': 0, 'Sep': 0, 'Oct': 0,
                'Nov': 0, 'Dec': 0}
        r = Read_Ex()
        s = r.read_excel()  # 读取Excel表
        for i in s:  # 提取具体员工数据
            star, end = on_the_job(i)  # 获取当前员工在职期间的月份
            print(star, end)
            print(i)
            count(work=work)  # 统计每月在职人数
            print(work)
        print('2020年每月在职人数为:')
        print(work)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制