为了账号安全,请及时绑定邮箱和手机立即绑定

按 2 列分组,计算第三数值列的分位数

按 2 列分组,计算第三数值列的分位数

沧海一幻觉 2023-12-29 10:29:05
我有一个 df 下面为: day     mealtype    ozMonday   Snack      .34Monday   Snack      .43Monday   Dinner     .31Tuesday  Breakfast  .10Monday   Dinner     .11Tuesday  Dinner     .09Sunday   Snack      .33Sunday   Dinner     .01Sunday   Lunch      .03我有下面的代码计算每天每种膳食类型的百分比 df.groupby('day')['mealtype'].value_counts(normalize=True).to_frame('%').reset_index().round(1)我如何调整此代码以获得盎司列的分位数 - p50 和 p90,但也按膳食类型日和膳食类型分组?谢谢!
查看完整描述

2 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

你可以试试这个


p50 = df.groupby(['day','mealtype']).agg(p50 = ('oz',lambda x: x.quantile(0.5))).reset_index()

p90 = df.groupby(['day','mealtype']).agg(p90 = ('oz',lambda x: x.quantile(0.9))).reset_index()

new_df=p50.merge(p90, on=['day','mealtype'])

new_df

或者


new_df = df.groupby(['day','mealtype'])['oz'].agg(p50 = (lambda x: x.quantile(0.5)),

                                         p90 = (lambda x: x.quantile(0.9))).reset_index()

输出


     day    mealtype    p50     p90

0   Monday  Dinner      0.210   0.290

1   Monday  Snack       0.385   0.421

2   Sunday  Dinner      0.010   0.010

3   Sunday  Lunch       0.030   0.030

4   Sunday  Snack       0.330   0.330

5   Tuesday Breakfast   0.100   0.100

6   Tuesday Dinner      0.090   0.090


查看完整回答
反对 回复 2023-12-29
?
ITMISS

TA贡献1871条经验 获得超8个赞

咱们试试吧groupby().quantile():


(df.groupby(['day','mealtype'])['oz']

   .quantile(q=[0.5,0.9])

   .unstack(level=-1)

   .rename(columns=lambda x: f'p{int(x*100)}') # rename columns

)

输出:


                     p50    p90

day     mealtype               

Monday  Dinner     0.210  0.290

        Snack      0.385  0.421

Sunday  Dinner     0.010  0.010

        Lunch      0.030  0.030

        Snack      0.330  0.330

Tuesday Breakfast  0.100  0.100

        Dinner     0.090  0.090


查看完整回答
反对 回复 2023-12-29
  • 2 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信