我的输入数据是;
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
我如何才能为独特的群体得到这个上、下栅栏?
期望的输出是;
GRP Upper_A Lower_A Upper_B Lower_B Upper_C Lower_C
Men
Women
Baby
你能帮我一下吗?PS:上下值是方框值和晶须值。
发布于 2019-10-31 12:22:45
将GroupBy.agg
与Series.quantile
一起使用,指定新的列名,然后通过f-string
使MultiIndex变平:
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
发布于 2019-10-31 12:18:08
使用:
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
发布于 2019-10-31 12:20:45
可以使用组并将索引扁平化。
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
复制相似问题