【问题标题】:Cumulative count based on two categorical columns基于两个分类列的累积计数
【发布时间】:2019-07-08 14:57:57
【问题描述】:

我想对表中的每条记录进行基于两个分类列的累积计数。

在下表中,我想获取 cum_count 列,该列是根据列 industrydeal_status 计算得出的。这个想法是,对于每条记录,计算同一行业以前赢得的交易数量。

例如,表的最后一条记录有一个 cum_count = 3,因为只有 3 个交易与 deal_status = 为 industry 赢得 = 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

【问题讨论】:

    标签: python pandas jupyter-notebook


    【解决方案1】:

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

    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
    

    【讨论】:

    • 非常感谢,它运行良好。我只是想出了 groupby 的想法,其余的都没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多