【问题标题】:How to assign a group based on consecutive sum in pandas如何根据熊猫中的连续总和分配组
【发布时间】:2022-10-07 16:22:46
【问题描述】:

我有一个数据框如下:

A         B          code cumul_sum
group1    group1_1    A     1
group1    group1_1    A     2
group1    group1_1    B     1
group1    group1_1    A     1
group1    group1_1    A     2
group1    group1_1    A     3 

请假设 A 列和 B 列属于同一类别。我想分组,预期结果如下

A         B          code cumul_sum   **groupcat**
group1    group1_1    A     1          group1
group1    group1_1    A     2          group1
group1    group1_1    B     1          group2
group1    group1_1    A     1          group3
group1    group1_1    A     2          group3
group1    group1_1    A     3          group3

由于中间出现了代码 B,因此 group1 没有分配到第三行,然后下一个值是新的分类值。

请指教

    标签: python pandas numpy


    【解决方案1】:

    您可以修改previous solution

    s = df[['A','B','C']].ne(df[['A','B','C']].shift()).any(axis=1).cumsum()
    df['groupcat'] = 'group' + s.astype(str)
    

    【讨论】:

      【解决方案2】:

      由于您的组忽略了代码,您可以在每个 1 值上重新启动:

      df['groupcat'] = df['cumul_sum'].eq(1).cumsum()
      

      作为字符串:

      df['groupcat'] = df['cumul_sum'].eq(1).cumsum().astype(str).radd('group')
      

      输出:

              A         B code  cumul_sum groupcat
      0  group1  group1_1    A          1   group1
      1  group1  group1_1    A          2   group1
      2  group1  group1_1    B          1   group2
      3  group1  group1_1    A          1   group3
      4  group1  group1_1    A          2   group3
      5  group1  group1_1    A          3   group3
      

      【讨论】:

        猜你喜欢
        • 2017-02-06
        • 2020-10-12
        • 2022-01-25
        • 2021-08-27
        • 2022-12-12
        • 1970-01-01
        • 2017-02-16
        相关资源
        最近更新 更多