I have the following DataFrame
of pandas
that I call reacciones
:
Modelo Apoyo Grupo Fx Fy Fz
0 Reacciones 00 P1 G -1.0 0 162.0
1 Reacciones 00 P1 Q -3.0 0 89.0
2 Reacciones 00 P1 Q 2.0 0 570.0
3 Reacciones 00 P2 G 5.0 0 19.0
4 Reacciones 00 P2 Q 4.0 0 5.0
5 Reacciones 00 P2 Q 2359.0 0 2894.0
6 Reacciones 00 P2 G -4.0 0 15.0
7 Reacciones 00 P2 Q -4.0 0 5.0
8 Reacciones 00 P2 Q 2740.0 0 -3464.0
0 Reacciones 01 P1 G -0.0 0 16.0
1 Reacciones 01 P1 Q 0.0 0 89.0
2 Reacciones 01 P1 Q -0.0 0 -22.0
3 Reacciones 01 P1 DL 1.0 3 -5.0
4 Reacciones 01 P1 DL -2.0 4 4.0
5 Reacciones 01 P2 G 0.0 0 2.0
6 Reacciones 01 P2 Q 4.0 0 5.0
7 Reacciones 01 P2 Q -92.0 0 -113.0
8 Reacciones 01 P2 DL -3.0 0 50.0
9 Reacciones 01 P2 DL -4.0 0 40.0
10 Reacciones 01 P2 G -0.0 0 2.0
11 Reacciones 01 P2 Q -4.0 0 5.0
12 Reacciones 01 P2 Q -107.0 0 136.0
13 Reacciones 01 P2 DL -10.0 0 50.0
14 Reacciones 01 P2 DL 5.0 0 -40.0
I get the maximum and minimum values of the columns Fx
, Fy
and Fz
grouped by Modelo
, Apoyo
and Grupo
with the following code:
agrupacion = ['Modelo', 'Apoyo', 'Grupo']
fuerzas = ['Fx', 'Fy', 'Fz']
reacciones.groupby(agrupacion).agg({x: [max, min] for x in fuerzas})
Fz Fy Fx
max min max min max min
Modelo Apoyo Grupo
Reacciones 00 P1 G 162.0 162.0 0 0 -1.0 -1.0
Q 570.0 89.0 0 0 2.0 -3.0
P2 G 19.0 15.0 0 0 5.0 -4.0
Q 2894.0 -3464.0 0 0 2740.0 -4.0
Reacciones 01 P1 DL 4.0 -5.0 4 3 1.0 -2.0
G 16.0 16.0 0 0 -0.0 -0.0
Q 89.0 -22.0 0 0 0.0 0.0
P2 DL 50.0 -40.0 0 0 5.0 -10.0
G 2.0 2.0 0 0 0.0 0.0
Q 136.0 -113.0 0 0 4.0 -107.0
The sum of the positive values and the sum of the negative values per group is obtained in the following way, for example for the column Fx
:
reacciones.groupby(['Modelo', 'Apoyo', 'Grupo'])['Fx'].\
agg([('suma_pos', lambda x : x[x > 0].sum()),
('suma_neg', lambda x : x[x < 0].sum())])
suma_pos suma_neg
Modelo Apoyo Grupo
Reacciones 00 P1 G NaN -1.0
Q 2.0 -3.0
P2 G 5.0 -4.0
Q 5103.0 -4.0
Reacciones 01 P1 DL 1.0 -2.0
G NaN NaN
Q NaN NaN
P2 DL 5.0 -17.0
G NaN NaN
Q 4.0 -203.0
Now, how do I get a value from these grouped tables?
For example:
Reacciones 00 -> P1 -> Q -> Fx max = 2.0
Reacciones 00 -> P2 -> Q -> Fx suma_pos = 5103.0