python - Pandas groupby 多个聚合,不包括焦点组

标签 python pandas dataframe pandas-groupby

我有一个像下面这样的玩具数据集。

   Building  Department  feature1  feature2
0         A           1        14        28
1         A           1        11        26
2         A           1        29        19
3         A           2        26        28
4         A           2        22        27
5         A           2        20        24
6         A           2        15        14
7         A           2        30        21
8         A           3        30        15
9         A           3        16        29
10        A           3        25        23
11        A           3        26        15
12        A           3        11        11
我想计算这些变量:
  • 对于每个建筑物和部门,Score1这是feature1的平均值和 feature2对于那个部门(扁平化并做平均,没有花哨的东西)
  • 对于每个建筑物和部门,Score2这是feature1的平均值和 feature2这是不包括该部门(即焦点小组)的平均值。

  • 所以,对于 Department 1 Score1将根据 Department 计算1 平均但 Score2将根据 Department 计算2 和 3。
    最后结果:
      Building  Department  Score1  Score2
    0        A           1   21.16  21.400
    1        A           2   22.70  20.500
    2        A           3   20.10  22.125
    
    我找不到任何 pandas这种“排除”的快捷方式。一种可能的解决方案是循环遍历组并像这样计算它,但是我的数据对于这样的循环来说太大了。
    任何帮助,提示表示赞赏!谢谢

    最佳答案

    你可以做:

    # stack to reshape the dataframe
    s = df.set_index(['Building', 'Department']).stack()
    
    # groupby and aggregate 
    m1 = s.groupby(level=[0, 1]).agg(['sum', 'count'])
    m2 = s.groupby(level=0).agg(['sum', 'count']) - m1
    
    # compute mean=sum/count and concatenate along axis=1
    out = pd.concat([m1['sum'] / m1['count'], m2['sum'] / m2['count']],
                       axis=1, keys=['Score1', 'Score2']).reset_index()
    
    详情:
    先设置buildingdepartment作为数据帧和堆栈的索引以 reshape 以展平特征:
    # s
    Building  Department          
    A         1           feature1    14
                          feature2    28
                          feature1    11
                          feature2    26
                          feature1    29
                          feature2    19
              2           feature1    26
                          feature2    28
                          feature1    22
                          feature2    27
                          feature1    20
                          feature2    24
                          feature1    15
                          feature2    14
                          feature1    30
                          feature2    21
              3           feature1    30
                          feature2    15
                          feature1    16
                          feature2    29
                          feature1    25
                          feature2    23
                          feature1    26
                          feature2    15
                          feature1    11
                          feature2    11
    
    groupby使用 sum 的堆叠数据框和聚合和 count :
    # m1 : sum and count per building and department
                         sum  count
    Building Department            
    A        1           127      6
             2           227     10
             3           201     10
    
    # m2 : sum and count per building - m1
                         sum  count
    Building Department            
    A        1           428     20
             2           328     16
             3           354     16
    
    计算 m1 的平均值 (Score1) m2 (Score2) 通过分栏sumcount并沿 axis=1 连接这些平均值得到想要的结果:
    # out
      Building  Department     Score1  Score2
    0        A           1  21.166667  21.400
    1        A           2  22.700000  20.500
    2        A           3  20.100000  22.125
    

    关于python - Pandas groupby 多个聚合,不包括焦点组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65409492/

    相关文章:

    Python:快速范围求和()

    python - 在 pandas 列标题上方插入一行以将标题名称保存在 csv/excel 文件的第一个单元格中

    pandas - 更改 Pandas 数据框中的值不起作用

    python - 对值进行排序并根据 Pandas 行创建新列

    python - Pandas :FutureWarning:将喜欢的列表传递给 .loc 或 []

    pandas - Groupby 两列其中一列是日期时间

    python - numpy.minimum() 的返回类型?

    Python 2.7 [Errno 113] 没有到主机的路由

    python - 将 utf-8 写入 Excel CSV

    python - Pandas:通过查找索引替换一系列值