W
e
l
c
o
m
e
: )

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
posted @ 2020-03-11 21:50  水一RAR  阅读(84)  评论(0编辑  收藏  举报