一个样本分年份计算按占比20%的数量计算均值

按收入final_income排序后,分年份(WAVE)计算BMI均值,计算结果类似下面这样,请问是用分箱操作吗?

这个数据处理关键的是按百分比进行分段, 可以用pd.qcut(), 只不过先分组后分段, 分段的关键步骤可参考:

import pandas as pd
import numpy as np

data = pd.DataFrame({'值':np.random.randint(10,100,1000),'类型':np.random.choice(['a','b','c'],1000)})

# 不分组
data['分段'] = pd.qcut(data['值'],q=5)

# 分组
data['分组_分段'] = data.groupby('类型').apply(lambda x: pd.qcut(x['值'],q=5,labels=['低','低中','中','中高','高'])).values

    值 类型             分段 分组_分段
0  25  a  (9.999, 27.0]     低
1  23  a  (9.999, 27.0]     低
2  90  a   (84.0, 99.0]     高
3  40  b   (27.0, 45.0]     低
4  34  c   (27.0, 45.0]    中高
df_2021['fenzu'] = df_2021.groupby('WAVE').apply(lambda x: pd.qcut(x['BMI'],q=5,labels=['低','低中','中','中高','高'])).values
means  = df_2021.groupby(['WAVE','fenzu'])['BMI'].mean()

在你基础上成功求出,我写的有点啰嗦。