我有99个人的年收入数据:
import pandas, random
incomes = pandas.DataFrame({'income':[round(random.triangular(20,80,200),0) for i in range(99)]})
方法:
对不起,听起来像是一个新手问题。我在学。谢谢!
答案 0 :(得分:3)
要对列进行分组,可以使用Series.quantile
,它可以指定分位数的序列。然后使用pd.cut
将列拆分为垃圾箱。
然后,您可以使用“分位数组”获得将数据框分组如下的统计信息:
quant = incomes.income.quantile(q=[0,0.33,0.66,1]).values
incomes['groups'] = pd.cut(incomes.income, quant, labels=["poor", "middle", "rich"])
incomes['avg_income'] = incomes.groupby('groups').transform('mean')
或者,如@allolz所提到的,您可以使用qcut
来完成上述步骤:
incomes['groups'] = pd.qcut(incomes.income, 3, labels=['poor', 'medium', 'rich'])
print(incomes)
income groups avg_income
0 96.0 middle 89.312500
1 77.0 poor 53.531250
2 93.0 middle 89.312500
3 86.0 middle 89.312500
4 59.0 poor 53.531250
.. ... ... ...
94 29.0 poor 53.531250
95 121.0 rich 112.823529
96 87.0 middle 89.312500
97 111.0 rich 112.823529
98 55.0 poor 53.531250