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

我有一个 df 下面为:


 day     mealtype    oz

Monday   Snack      .34

Monday   Snack      .43

Monday   Dinner     .31

Tuesday  Breakfast  .10

Monday   Dinner     .11

Tuesday  Dinner     .09

Sunday   Snack      .33

Sunday   Dinner     .01

Sunday   Lunch      .03

我有下面的代码计算每天每种膳食类型的百分比


 df.groupby('day')['mealtype'].value_counts(normalize=True).to_frame('%').reset_index().round(1)

我如何调整此代码以获得盎司列的分位数 - p50 和 p90,但也按膳食类型日和膳食类型分组?


谢谢!


沧海一幻觉
浏览 139回答 2
2回答

一只甜甜圈

你可以试试这个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     p900   Monday  Dinner      0.210   0.2901   Monday  Snack       0.385   0.4212   Sunday  Dinner      0.010   0.0103   Sunday  Lunch       0.030   0.0304   Sunday  Snack       0.330   0.3305   Tuesday Breakfast   0.100   0.1006   Tuesday Dinner      0.090   0.090

ITMISS

咱们试试吧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    p90day     mealtype               Monday  Dinner     0.210  0.290        Snack      0.385  0.421Sunday  Dinner     0.010  0.010        Lunch      0.030  0.030        Snack      0.330  0.330Tuesday Breakfast  0.100  0.100        Dinner     0.090  0.090
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python