代码之家  ›  专栏  ›  技术社区  ›  kiwi_kimchi

根据N列的值计算行数

  •  0
  • kiwi_kimchi  · 技术社区  · 2 年前

    我有一个数据集,如下所示:

    Col1    Col2    Col3
    A        100     100
    A         0       0
    A         0      100
    B        100      0
    C        100     100
    C        100     100
    

    我想根据 A B C

    这将导致:

        Col2_counts   Col3_counts
    A       1           2
    B       1           0
    C       2           2
    

    这样我就可以计算出 A B C 在里面 Col2 Col3

    我试过了 df.groupby(['Col1', 'Col 2', 'Col3']).transform ('count') ,但它并没有给我想要的结果。

    1 回复  |  直到 2 年前
        1
  •  2
  •   Panda Kim    2 年前
    df.set_index('Col1').gt(0).groupby(level=0).sum()
    

    输出:

            Col2    Col3
    Col1        
    A       1       2
    B       1       0
    C       2       2
    
        2
  •  0
  •   Lonbot    2 年前

    以下块将生成您的预期输出:

    (
        df
        .set_index("Col1")
        .eq(100)
        .groupby("Col1")
        .sum()
        .add_suffix("_counts")
    )
    

    正如chrslg所指出的,Panda Kim的回答评估了rows>0而不是行==100。此外,您可以添加 "_counts" 后缀,以获取示例中的列名。

    以下是每个操作的分步说明:

    1. 设置 "Col1" 作为DataFrame的索引。

    2. 评估单元格是否相等( eq )至100。

            Col2    Col3
      Col1        
      A     True    True
      A     False   False
      A     False   True
      B     True    False
      C     True    True
      C     True    True
      
    3. 按分组 “第1列” 索引和计数 True 价值观使用 sum 操作之所以有效,是因为它转换 正确 至1和 False 到0。

    4. 添加 “计数(_co)” 所有列的后缀。

            Col2_counts   Col3_counts
      Col1        
      A         1              2
      B         1              0
      C         2              2