关于pandas groupby 的几点深入研究

在一个groupby 语句中实现多列计算

dfgp=dfal.groupby(['机构代码','机构']) \
         .agg(
             人力=('姓名','size'),//计数
             预签人力=('是否预签','sum'),//求和
             预签率=('是否预签',lambda x:sum(x)/len(x)*100), //本列未0,1,求和作为分子,计数作为分母
             保费预估低档=('保费预估低档',lambda x:(x.sum()/10000).round(2)),//汇总后以万为单位四舍五入
             保费预估中档=('保费预估中档',lambda x:(x.sum()/10000).round(2)),
             保费预估高档=('保费预估高档',lambda x:(x.sum()/10000).round(2))
             ).reset_index() //重置索引,否则分组字段将被默认为索引



dfgpCnt= dfrlgpall.groupby(['ORGAN_ID',"机构"]) \
    .agg(
         总监=('grade_type4',lambda x: ( x=='总监').sum()),         
         
         高经=('grade_type4',lambda x: ( x=='高经').sum()), 
         业经=('grade_type4',lambda x: ( x=='业经').sum()),
         业务员=('grade_type4',lambda x: ( x=='业务员').sum())    
        ).reset_index()

#groupby apply lambda 的例子, 汇总以后,计算列涉及多列的计算


dfgpCnt=dfrlgpall.groupby(['ORGAN_ID',"机构"],as_index=False) \
  .apply(lambda x: pd.Series({
      '总监' : (x['grade_type4']=="总监").sum(),
      '20件总监人力' :( (x['grade_type4']=="总监") &  (x['预收件数']>=20)  ).sum(),
      
      
      '高经' : (x['grade_type4']=="高经").sum(),
      '10件高经人力' :( (x['grade_type4']=="高经") &  (x['预收件数']>=10)  ).sum(),
      
      '业经' : (x['grade_type4']=="业经").sum(),
      '5件业经人力' :( (x['grade_type4']=="业经") &  (x['预收件数']>=10)  ).sum(),
  })
)


df04=df03.groupby(['分公司','中支名称','四级机构名称','业务员姓名','业务员代码']) \
    .apply(lambda x:pd.Series({
        '件数':x.同一被保险人保单序号.sum(),
        '保费':x.规则保费.sum(),
        '太平福禄件数':x.是否含有太平福禄.sum(),
        '福禄保费': x[x.是否含有太平福禄==1]['规则保费'].sum()
        })
        ).reset_index()

##汇总单一值的方法 nunique, number of unique
gp01=dfdaitl.groupby(['三级机构']) \
    .apply(lambda x:pd.Series({
        # '参与代理人数':len(x['工号'].unique()),
        '参与代理人数1':x['工号'].nunique(),
        '参与客户数':len(x)
        
        })
        
        ).reset_index()
# 
df211=df21.groupby(['业务员代码']).agg(
    长险期交保费=('承保期交',sum),
    是否3000P=('承保期交',lambda x: 1 if x.loc[ x>= 3000].size >=1 else 0  ),
    ).reset_index()




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值