按收入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()
在你基础上成功求出,我写的有点啰嗦。