如何用Pandas将99人年收入按分位数分组并计算各组均值
划分收入分位组并计算组内平均收入的解决方案
嘿,我来帮你搞定这个问题!你已经生成了99个基于三角分布的收入数据,现在要把它们分成三等分的分位组(每组33人),再计算每组的平均收入对吧?咱们一步步来实现:
步骤1:生成并确认数据
首先运行你提供的数据生成代码,也可以额外查看下数据的基本结构,确保没问题:
import pandas as pd import random # 生成99个收入数据 incomes = pd.DataFrame({'income':[round(random.triangular(20,80,200),0) for i in range(99)]}) # 查看前5条数据,确认数据结构 print(incomes.head())
步骤2:按数量均分划分分位组
这里推荐用pandas的qcut()函数,它能按数据的分位数将数据分成等数量的组,正好符合你每组33人的需求。我们直接给三个组命名为「贫困」「中等」「富裕」:
# 将收入数据分成3个等数量的分位组 incomes['group'] = pd.qcut(incomes['income'], q=3, labels=['贫困', '中等', '富裕'])
简单解释下:q=3表示分成3个分位,因为总共有99条数据,99/3=33,所以每组正好33人;labels参数用来指定每个组的名称,让结果更直观。
步骤3:验证分组数量并计算组内平均收入
先验证下每组的人数是否都是33,确保分组正确:
# 查看每组的人数 print("每组人数:") print(incomes['group'].value_counts())
然后就可以按组计算平均收入了,用groupby()分组后取均值即可:
# 计算每个分位组的平均收入(保留两位小数) group_average_income = incomes.groupby('group')['income'].mean().round(2) print("\n各分位组平均收入:") print(group_average_income)
完整可运行代码
把上面的步骤整合起来,你可以直接复制运行:
import pandas as pd import random # 生成数据 incomes = pd.DataFrame({'income':[round(random.triangular(20,80,200),0) for i in range(99)]}) # 划分分位组 incomes['group'] = pd.qcut(incomes['income'], q=3, labels=['贫困', '中等', '富裕']) # 验证分组人数 print("每组人数:") print(incomes['group'].value_counts()) # 计算组内平均收入 group_average_income = incomes.groupby('group')['income'].mean().round(2) print("\n各分位组平均收入:") print(group_average_income)
这样你就能得到每个分位组的平均收入啦,要是有其他疑问随时问!
内容的提问来源于stack exchange,提问作者elemolotiv
相关产品推荐
相关产品推荐

