数据的分组
Pandas提供了一个灵活高效的groupby
功能,它能对数据集进行切片、切块、摘要等操作。
DataFrame.groupby('列索引')
, 分组后的结果为DataFrameGroupBy object
,是一个分组后的对象。用groupby
的size()
方法可以查看分组后每组的数量,并返回一个含有各分组所包含数值数量的Series:print(groups.size())
import pandas as pd
import random
dic = {
'name':['xiaoming','xiaohua','xiaohong','xiaohei','xiaobai'],'gender':['F','M','F','F','M'],'grade':random.sample(range(0,100),5)}
df = pd.DataFrame(dic)
df
name | gender | grade | |
---|---|---|---|
0 | xiaoming | F | 72 |
1 | xiaohua | M | 39 |
2 | xiaohong | F | 31 |
3 | xiaohei | F | 6 |
4 | xiaobai | M | 81 |
groups = df.groupby('gender')
print(groups)
print(type(groups)) # 分组后的对象
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000272FF801DD8>
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>
datas = groups.size()
print(datas) # 返回各组多少数量的Series对象
print(type(datas))
gender
F 3
M 2
dtype: int64
<class 'pandas.core.series.Series'>
# 计算男女比例
rate = datas['F']/datas['M']
rate
1.5
# 计算男女占总人数的比例
for gender, quantity in datas.items():
rate1 = quantity / df.shape[0]
final_rate = '%.2f%%'%(rate1*100)
print('总人数中{}性占比为{}'.format(gender,final_rate))
总人数中F性占比为60.00%
总人数中M性占比为40.00%