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

2024-10-03 09:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

对于表中的每条记录,我想基于两个分类列进行累计计数。你知道吗

在下表中,我想得到累计计数列,它是基于行业交易状态列计算的。这样做的目的是,对每一项记录,统计同一行业以往赢得交易的数量。你知道吗

例如,该表的最后一条记录具有累计计数=3,因为之前只看到3个交易状态=win For行业=x的交易。你知道吗

Pandas' GroupBy.cumcount function对单个变量执行此操作。。。你知道吗

对于我描述的案例,我如何做到这一点?你知道吗

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

Tags: time状态记录交易company计数行业lost
1条回答
网友
1楼 · 发布于 2024-10-03 09:18:22

创建一个helper列,您将获取其累积和。由于您的计数只包括以前的赢值,因此需要在每个组内移动:

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

相关问题 更多 >