Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas Getting Upper and Lower Fences For Each Rows

My input dataframe is;

Grp          A          B       C
Men          10         15      20
Women        15         10      25
Baby         5          10      20
Men          3          8       25
Men          7          5       30
Baby         5          2       8
Women        10         6       3

How can i get this upper and lower fences for unique groups?

Desired Output is;

GRP        Upper_A     Lower_A      Upper_B     Lower_B   Upper_C   Lower_C
Men
Women
Baby

Could you please help me about this? PS: Upper and lower values are box and whisker values.

like image 230
Salih Avatar asked Oct 18 '25 04:10

Salih


1 Answers

Use GroupBy.agg with Series.quantile, specify new columns names and then flatten MultiIndex by f-strings:

df = df.groupby('Grp').agg([('Upper', lambda x: x.quantile(.75)), 
                            ('Lower',lambda x: x.quantile(.25))])
df.columns = [f"{b}_{a}" for a,b in df.columns]
print (df)
       Upper_A  Lower_A  Upper_B  Lower_B  Upper_C  Lower_C
Grp                                                        
Baby      5.00     5.00      8.0      4.0     17.0     11.0
Men       8.50     5.00     11.5      6.5     27.5     22.5
Women    13.75    11.25      9.0      7.0     19.5      8.5
like image 95
jezrael Avatar answered Oct 20 '25 08:10

jezrael



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!