首页 > 解决方案 > 获取 pandas 分组 DataFrame 的列和组的值

问题描述

我有一个分组的熊猫数据框,如下所示:

                                      Fx      Fy     Fz      Mx     My     Mz
Model         Group  Support  Node
Reactions 00  G      P1       1       -3.0    3.0    170.0    0.0   -23.0   -1.0 
                     P2       3       6.0     11.0   180.0    0.0   -15.0   -1.0 
                              4       -1.0    19.0   115.0    0.0   -7.0    -1.0 
              Q      P1       1       -1.0    7.0    550.0    0.0   -19.0   -1.0 
                     P2       3       2404.0  15.0   2005.0   0.0   -11.0   -1.0 
                              4       2736.0  23.0   -2995.0  0.0   -3.0    -1.0 
Reactions 01  D      P1       1       -1.0    -9.0   -1.0     0.0   23.0    -1.0 
                     P2       3       -7.0    -19.0  140.0    0.0   13.0    1.0 
                              4       -5.0    -29.0  -3950.0  0.0   3.0     1.0 
              G      P1       1       -1.0    -1.0   10.0     0.0   15.0    -1.0 
                     P2       3       -6.0    -6.0   10.0     0.0   10.0    6.0 
                              4       4.0     -11.0  100.0    0.0   5.0     -11.0 
              Q      P1       1       0.0     -5.0   400.0    0.0   27.0    -1.0 
                     P2       3       -86.0   -15.0  -95.0    0.0   17.0    1.0 
                              4       -110.0  -25.0  135.0    0.0   7.0      -1.0

我想为每个组获取并支持每列的最大值,以及相关的模型和节点。那是:

Group   Support     ->  Fx,max  ->  Model           Node
G       P1          ->  -1.0    ->  Reactions 01    1 
G       P2          ->  6.0     ->  Reactions 00    3
Q       P1          ->  0.0     ->  Reactions 01    1
Q       P2          ->  2736.0  ->  Reactions 00    4

对于每列 Fx 到 Mz,依此类推。

标签: pythonpandas

解决方案


您可以按索引级别分组,并调用自定义lambda函数。将这些lambda作为元组传递以控制列标题并使用idxmax聚合函数:

df.groupby(level=[1, 2]).agg(['max',
                              ('model', lambda x: x.idxmax()[0]),
                              ('node', lambda x: x.idxmax()[3])])

[出去]

                   Fx                       Fy                         Fz  \
                  max         model node   max         model node     max   
Group Support                                                               
D     P1         -1.0  Reactions 01  1.0  -9.0  Reactions 01  1.0    -1.0   
      P2         -5.0  Reactions 01  4.0 -19.0  Reactions 01  3.0   140.0   
G     P1         -1.0  Reactions 01  1.0   3.0  Reactions 00  1.0   170.0   
      P2          6.0  Reactions 00  3.0  19.0  Reactions 00  4.0   180.0   
Q     P1          0.0  Reactions 01  1.0   7.0  Reactions 00  1.0   550.0   
      P2       2736.0  Reactions 00  4.0  23.0  Reactions 00  4.0  2005.0   

                                   Mx                       My                \
                      model node  max         model node   max         model   
Group Support                                                                  
D     P1       Reactions 01  1.0  0.0  Reactions 01  1.0  23.0  Reactions 01   
      P2       Reactions 01  3.0  0.0  Reactions 01  3.0  13.0  Reactions 01   
G     P1       Reactions 00  1.0  0.0  Reactions 00  1.0  15.0  Reactions 01   
      P2       Reactions 00  3.0  0.0  Reactions 00  3.0  10.0  Reactions 01   
Q     P1       Reactions 00  1.0  0.0  Reactions 00  1.0  27.0  Reactions 01   
      P2       Reactions 00  3.0  0.0  Reactions 00  3.0  17.0  Reactions 01   

                     Mz                     
              node  max         model node  
Group Support                               
D     P1       1.0 -1.0  Reactions 01  1.0  
      P2       3.0  1.0  Reactions 01  3.0  
G     P1       1.0 -1.0  Reactions 00  1.0  
      P2       3.0  6.0  Reactions 01  3.0  
Q     P1       1.0 -1.0  Reactions 00  1.0  
      P2       3.0  1.0  Reactions 01  3.0  

推荐阅读