05、Panads透视表,交叉表
Pandas透视表和交叉表
- 交叉表就是聚合函数是len个数的透视表
- 透视表是由聚合函数是mean的分组旋转而成
构建数据
columns = ['姓名', '年龄', '班级', '电话号码', '学号', '成绩']
data = [['码云', 40, 101, '1123131123321', '001', 120], ['李佳乘', 80, 102, '13123213321', '002', 130],
['麻花腾', 40, 102, '1123131123321', '003', 100],
['麻花腾', 40, 101, '1123131123321', '003', 89]]
df = pd.DataFrame(columns=columns, data=data)
1.透视表 pivot_table
1.参数解析
values=None, 指定要显示列
index=None, 按照指定的行分
columns=None,按照指定的列分
aggfunc='mean', 默认的执行函数
fill_value=None 当数据缺失的时候,自动填充nan值
dropna=True, 删除缺失值
margins 汇总开关
1.列分
# 按照指定行进行透视
print(pd.pivot_table(df, columns='班级',aggfunc='mean'))
# 可以看到 这边的我们 以班级为列,其他剩余的为行,由于 其他的 为字符串,无法求平均值所以直接忽略
班级 101 102
年龄 40.0 60.0
成绩 104.5 115.0
2.行分
print(pd.pivot_table(df, index=['班级', '成绩'], aggfunc='mean'))
#
班级 成绩 年龄
101 89 40
120 40
102 100 40
130 80
3.指定你想看那一列
print(pd.pivot_table(df, index='班级', values='成绩'))
# 行分数据,指定查看成绩,默认参数为求平均值
班级 成绩
101 104.5
102 115.0
4.汇总开关
这里可能出现,计算不准确情况,此时使用dropna=True即可
print(pd.pivot_table(df, margins=True, index='班级'))
# 行分,默认函数为求平均值,可以看到 all 的 数据正是 平均值
年龄 成绩
班级
101 40 104.50
102 60 115.00
All 50 109.75
2.交叉表 crosstab
交叉表,需要指定行,列,显示的数值,并且 没有默认的函数
重点倾向于透视表
dataCrosstab = pd.crosstab(index=df['班级'], values=df['成绩'], columns=df['姓名'], aggfunc=np.sum)
print(dataCrosstab)
#
姓名
李佳乘 码云 麻花腾
班级
101 NaN 120.0 89.0
102 130.0 NaN 100.0