Pandas Getting Upper and Lower Fences For Each Rows

ぐ巨炮叔叔 提交于 2019-12-24 06:29:40

问题


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.


回答1:


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



回答2:


Use:

new_df=( df.groupby('Grp').agg(Upper_A=('A','max'),Lower_A=('A','min'),
                             Upper_B=('B','max'),Lower_B=('B','min'),
                             Upper_C=('C','max'),Lower_C=('C','min'))
         .reset_index() )
print(new_df)



     Grp  Upper_A  Lower_A  Upper_B  Lower_B  Upper_C  Lower_C
0   Baby        5        5       10        2       20        8
1    Men       10        3       15        5       30       20
2  Women       15       10       10        6       25        3



回答3:


You can use a group by and flatten the index

new_df = df.groupby("GRP").agg("min","max")
new_df.columns = [f"{c}_{a}" for c,a in new_def.columns]


来源:https://stackoverflow.com/questions/58643015/pandas-getting-upper-and-lower-fences-for-each-rows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!