熊猫按小计排序

时间:2021-07-13 18:31:15

标签: python pandas

我有一个如下所示的多索引数据框。我有意识地提供完整数据,因为当我使用小数据尝试此解决方案 pandas multi index sort with several conditions 时还可以,但是当我尝试使用完整数据时,它不起作用。

多索引是:'MATERIALNAME' 和 'CURINGMACHINE'

'材料名称':0 级

'CURINGMACHINE':1 级

                            HEADERCOUNTER
MATERIALNAME CURINGMACHINE               
1011         PPU04L                     1
             SubTotal                   1
1033         PPZB12L                    1
             SubTotal                   1
2618         PPZF04L                    1
             SubTotal                   1
2913         PPZB02L                    4
             PPZB02R                    8
             SubTotal                  12
2983         PPZB03L                    1
             SubTotal                   1
3411         PPB01L                     1
             PPC13R                     1
             SubTotal                   2
4444         PPU11L                     1
             SubTotal                   1
4600         PPU10L                     1
             SubTotal                   1
4994         PPV06R                     4
             SubTotal                   4
6161         PPZB14R                    3
             SubTotal                   3
6751         PPZE02L                    1
             SubTotal                   1
6907         PPZC11L                    3
             PPZC11R                    3
             SubTotal                   6
7905         PPY06R                     1
             SubTotal                   1
8594         PPZA10L                    2
             PPZA10R                    6
             SubTotal                   8
9995         PPZF10R                    1
             SubTotal                   1
D250         PPH07                      1
             SubTotal                   1
D560         PPH10                      1
             SubTotal                   1
D570         PPH11                      2
             SubTotal                   2
K188         PPZD09R                    1
             SubTotal                   1
K204         PPB02R                     1
             SubTotal                   1
K314         PPZC12L                    4
             PPZC12R                    1
             SubTotal                   5
K318         PPN12R                     2
             SubTotal                   2
K698         PPZA12L                    1
             SubTotal                   1
K709         PPE11R                     1
             PPE12R                     1
             SubTotal                   2
K902         PPL12L                     1
             PPM02L                     1
             PPM02R                     3
             SubTotal                   5
K934         PPM06L                     2
             SubTotal                   2
K967         PPL09L                     4
             PPL09R                     1
             PPN04L                     2
             SubTotal                   7
K990         PPM04L                     1
             PPM04R                     4
             PPN05R                     2
             SubTotal                   7
Grand        Total                     81

我想根据每个 level 0 'MATERIALNAME' 列的小计对这个 df 进行排序。

编辑: 这不应该发生。

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,我会重置索引,以便您再次拥有一个数据框(现在它看起来像一个具有多索引的熊猫系列)

df = df.reset_index()

然后您可以添加包含要排序的值的新列

df["subtotal"] = df.groupby("MATERIALNAME")["HEADERCOUNTER"].transform(sum)

最后,对它进行排序(最高的在前)。如果多个组中的小计相同,则按组标识符进行排序。

df.sort_values(["subtotal", "MATERIALNAME"], ascending=False)