为了账号安全,请及时绑定邮箱和手机立即绑定

基于两个分类列的累积计数

基于两个分类列的累积计数

30秒到达战场 2021-11-09 10:36:23
对于表中的每条记录,我想做一个基于两个分类列的累积计数。在下表中,我想获取cum_count列,它是根据列industry和deal_status计算的。这个想法是,对于每条记录,计算同一行业以前赢得的交易数量。例如,表的最后一个记录有cum_count = 3,因为只有3涉及deal_status =赢得了业界= X之前已经见过。该大熊猫GroupBy.cumcount功能的确,对于一个变量...对于我描述的案例,我如何才能做到这一点?pd.DataFrame({'time': [1, 2, 3, 4, 5, 6, 7],              'company' : ["ciaA", "ciaB", "ciaA", "ciaC", "ciaA", "ciaD", "ciaE"],              'industry' : ["x", "y", "x", "x", "x", "y", "x"],              'deal_status' : ["won", "lost", "won", "won", "lost", "won", "lost"],              'cum_count' : [0, 0, 1, 2, 3, 0, 3]})time    company    industry     deal_status     cum_count 1       ciaA         x             won             0 2       ciaB         y            lost             0 3       ciaA         x             won             1 4       ciaC         x             won             2 5       ciaA         x            lost             3 6       ciaD         y             won             0 7       ciaE         x            lost             3
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

创建一个辅助列,您将对其进行累计总和。需要在每个组内移动,因为您的计数仅包括之前的获胜值:


df['to_sum'] = (df.deal_status == 'won').astype(int)

df['cum_count'] = (df.groupby('industry')

                    .apply(lambda x: x.to_sum.shift(1).cumsum()).fillna(0)

                    .reset_index(0, drop=True))

输出df:

   time company industry deal_status  to_sum  cum_count

0     1    ciaA        x         won       1        0.0

1     2    ciaB        y        lost       0        0.0

2     3    ciaA        x         won       1        1.0

3     4    ciaC        x         won       1        2.0

4     5    ciaA        x        lost       0        3.0

5     6    ciaD        y         won       1        0.0

6     7    ciaE        x        lost       0        3.0


查看完整回答
反对 回复 2021-11-09
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信