扇贝编程吧 关注:41贴子:367

回复:#编程之星|巧用Python管理企业

只看楼主收藏回复

运行一下看看。


32楼2021-05-20 21:04
回复
    我们想要的已经有了,剩下就是横向和纵向两个求和了,也就是标黄区域。


    33楼2021-05-20 21:04
    回复
      广告
      立即查看
      思路也很简单,先是横向求和。横向求和的不是简单的相加就可以,因为前边的数都是单数,需要注意总记分是“对应分值*该分值的单数”再求和,即:
      self.dep_analyse['总计分'] = self.dep_analyse['12分单数']*12+ self.dep_analyse['6分单数']*6+ self.dep_analyse['3分单数']*3 + self.dep_analyse['2分单数']*2+ self.dep_analyse['1分单数']*1


      34楼2021-05-20 21:04
      回复
        然后是纵向求和。这个比较简单,直接上边各行相加就行了,有两个思路:
        第一个思路,直接用loc方式把上面几行加起来:
        self.dep_analyse.loc['合计'] = self.dep_analyse.loc['东区'] +
        self.dep_analyse.loc['中区'] + self.dep_analyse.loc['西区']


        35楼2021-05-20 21:25
        回复
          结果如下:


          36楼2021-05-20 21:25
          回复
            第二个思路,使用apply函数:
            self.dep_analyse.loc['合计'] = self.dep_analyse[['12分单数','6分单数','3分单数','2分单数','1分单数','总计分']].apply(lambda x: sum(x))
            结果如下:


            37楼2021-05-20 21:25
            回复
              推荐第二种,因为该案例为了方便演示,所以分区进行了极大的简化,如果区域数超过10个,代码将会变得非常臃肿。
              好了,这个函数就完成了。


              38楼2021-05-20 21:25
              回复
                l 第四部分
                是对分包商的违章情况进行分析。
                先来看一下需求与原数据:



                39楼2021-05-20 21:25
                回复
                  广告
                  立即查看
                  看完表格的瞬间,我们就有了灵感,首先我们需求表格的第一列是按分包商名称分类的,所以groupby函数是最佳选择,然后我们要分析每个分包商的违章单数和扣分总数,单数就是数一数挂在这个分包单位名下的“交通违章单号”出现了几次,对应count()函数,扣分总数就是把B列求和,对应sum()函数,现在要把两列的运算整合起来,要用到agg函数,于是:
                  contractor_database = self.Vio_file.groupby('所属单位').agg({
                  '交通违章单号': lambda x: len(x),
                  '本次违章扣分': lambda x: sum(x)
                  })
                  print(contractor_database)


                  40楼2021-05-20 21:26
                  回复
                    结果出来了:


                    41楼2021-05-20 21:26
                    回复
                      基本上就是我们想要的,我们只需要用rename函数重命名一下columns就可以了:
                      contractor_database.rename(columns={'交通违章单号':'违章次数','本次违章扣分':'扣分总数'},inplace=True)


                      42楼2021-05-20 21:27
                      回复


                        43楼2021-05-20 21:27
                        回复
                          l 第五部分
                          让我瞧瞧谁扣满12分了。这部分也比较简单,说白了就是根据姓名进行groupby,再把记分sum一下,代码如下:
                          def Blacklist(self):
                          blacklist = self.Vio_file.groupby('违章人员姓名').sum()
                          blacklist = blacklist[blacklist['本次违章扣分']>=12]
                          print(blacklist)


                          44楼2021-05-20 21:27
                          回复
                            结果如下:


                            45楼2021-05-20 21:27
                            回复
                              广告
                              立即查看
                              基本上是可以的,但是仍然需要对列重命名,而且还需要剔除“违章条款”一列:
                              blacklist.rename(columns={'本次违章扣分':'总扣分'},inplace=True)self.blacklist = blacklist['总扣分'] #注意,我们后边还需要写入excel,需要跨函数调用变量,所以这里一定要加self


                              46楼2021-05-20 21:28
                              回复