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

根据员工在职明细表,统计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 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件