1.group by 分组
1.1分组计算所有数字列的值
- 根据年龄分组,算出各个字段的平均值
df.groupby('age').mean()
1.2分组计算指定列的值
- 根据年龄分组,算出education的值
df.groupby('age')['education'].mean()
2.分箱和透视表
2.1 等距离分箱
- 将年龄根据0-30,30-40,40-50,50-60,70到无穷大分成1,2,3,4,5个等级,并创建一个年龄等级页
df["age_classify"] = pd.cut(df["age"],[0,30,40,50,60,float('inf')],labels=["1","2","3","4","5"])
注意:float('inf')表示的是无穷大
2.2 透视表
2.2.1 单列分组的透视表
纵向按照年龄和性别分组,横向education分组,表的内容是对currentSmoker进行统计求和
所以:我们可以直观的看到,不同年龄,不同性别,不同教育程度的人,他们现在抽烟的人数有的多少
df.pivot_table('currentSmoker',index=['age','male'],columns='education',aggfunc='sum',fill_value=0)
![](https://img.haomeiwen.com/i14814834/3d94d815cbef8cff.png)
其中:
-
ccurrentSmoker
:表示表中内容是什么 -
index=
['age','male']`:表示需要分组,这里先将年龄分组,然后将每个年龄里面的男女性别进行分组 -
columns
: 表示列名的聚合,这里将不同的education情况进行了分组 -
aggfunc='sum'
:表示求和 -
fill_value=0
:表示将NAN用0来 填充
2.2.2 多列分组透视表
将上面的currentSmoker
在添加一个totChol
的汇总
df.pivot_table(['currentSmoker','totChol'],index=['age','male'],columns='education',aggfunc='sum',fill_value=0)
![](https://img.haomeiwen.com/i14814834/111488931348435f.png)
2.2.3 不同的列不同的聚合计算
将上面的对tolchol改成查看最大值
df.pivot_table(['currentSmoker','totChol'],index=['age','male'],columns='education',aggfunc={'currentSmoker':'sum','totChol':'max'},fill_value=0)
![](https://img.haomeiwen.com/i14814834/61475bb1109f267d.png)
2.2.4 添加表尾的合计
df.pivot_table(['currentSmoker'],index=['age','male'],columns='education',aggfunc='sum',fill_value=0,margins=True,margins_name='Total')
![](https://img.haomeiwen.com/i14814834/03fb5f97c35b783b.png)
2.2.5 对分好组的表在进行分组
df.pivot_table(['currentSmoker'],index=['age','male'],columns='education',aggfunc='sum',fill_value=0,margins=True,margins_name='Total').groupby('age').sum()
- 为了直观,最好将分好组的表重新命名一个新的表
df_group=df.pivot_table(['currentSmoker'],index=['age','male'],columns='education',aggfunc='sum',fill_value=0,margins=True,margins_name='Total')
df_group.groupby('age').sum()
2.2.4 分组频率统计
按照性别分组,查看教育程度出现的频率
pd.crosstab(df['male'],df['education'],margins=True)
![](https://img.haomeiwen.com/i14814834/0bc77a1b2b1c8409.png)
网友评论