第2关:Pandas创建透视表和交叉表

本文介绍了如何使用Pandas的pivot_table和crosstab函数创建透视表和交叉表,以分析tip.csv数据集中顾客在不同用餐时间和星期下的小费总和。通过示例展示了这两个函数的参数及用法。
部署运行你感兴趣的模型镜像

任务描述
本关任务:使用Pandas加载tip.csv文件中的数据集,分别用透视表和交叉表统计顾客在每种用餐时间、每个星期下的小费总和情况。

相关知识
透视表
透视表是各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行聚合,并根据行和列上得分组建将数据分配到各个矩形区域中。在pandas中,可以通过pivot_table函数创建透视表。
pivot_talbe函数的参数:

DataFrame.pivot_table(self, values=None, index=None, columns=None,ggfunc='mean', fill_value=None, .margins=False,dropna=True, margins_name='All') 
参数名说明
values待聚合的列的名称。默认聚合所有数值列
index用于分组的列名或其他分组键,出现在结果透视表的行
columns用于分组的列名或其他分组键,出现在结果透视表的列
aggfunc聚合函数或函数列表,默认为mean,可以是任何对groupby有效的函数
fill_value用于替换结果表中的缺失值
dropnaboolean值,默认为True
margins_namestring,默认为‘ALL’,当参数margins为True时,ALL行和列的名字

示例:

data = {'A': [1, 2, 2, 3, 2, 4],  
        'B': [2014, 2015, 2014, 2014, 2015, 2017],  
        'C': ["a", "b", "c", "d", "e", "f"],  
        'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]  
        }  
df = pd.DataFrame(data)  
df.pivot_table(index=["B"], columns=["C"], values=["A"], aggfunc=sum, margins=True)  

输出:

        A  
C       a    b    c    d    e    f All  
B  
2014  1.0  NaN  2.0  3.0  NaN  NaN   6  
2015  NaN  2.0  NaN  NaN  2.0  NaN   4  
2017  NaN  NaN  NaN  NaN  NaN  4.0   4  
All   1.0  2.0  2.0  3.0  2.0  4.0  14  

交叉表
交叉表是一种用于计算分组频率的特殊透视表。通常使用crosstab函数来创建交叉表。

crosstab的参数

pd.crosstab(index,columns,values=None,rownames=None  
colnames=None,aggfunc=None,margins=False,dropna=True,normalize=False)  

其中rownames可以设置行名,colnames可以设置列名,而且前两个参数可以是数组、Series或数组列表。

示例:

data = {'A': [1, 2, 2, 3, 2, 4],  
        'B': [2014, 2015, 2014, 2014, 2015, 2017],  
        'C': ["a", "b", "c", "d", "e", "f"],  
        'D': [0.5, 0.9, 2.1, 1.5, 0.5, 0.1]  
        }  
df = pd.DataFrame(data)  
pd.crosstab(index=[df["B"],df["A"]], columns=df["C"], values=df["A"], aggfunc=sum, margins=True)  

输出:

C         a    b    c    d    e    f  All  
B    A  
2014 1  1.0  NaN  NaN  NaN  NaN  NaN    1  
     2  NaN  NaN  2.0  NaN  NaN  NaN    2  
     3  NaN  NaN  NaN  3.0  NaN  NaN    3  
2015 2  NaN  2.0  NaN  NaN  2.0  NaN    4  
2017 4  NaN  NaN  NaN  NaN  NaN  4.0    4  
All     1.0  2.0  2.0  3.0  2.0  4.0   14  

编程要求
使用Pandas中的read_csv函数加载step2/tip.csv文件中的数据集,分别用透视表和交叉表统计顾客在每种用餐时间(time) 、每个星期下(day) 的 小费(tip)总和情况。在右侧编辑器begin-end处补充代码。

数据集列名信息如下表:

列名说明
total_bill消费总账单
tip小费金额
day消费日期(星期几)
time用餐时间段(早、中、晚)
size吸烟数量

测试输入:
预期输出:

透视表:  
         tip                  
time  Dinner   Lunch     All  
day                           
Fri    35.28   16.68   51.96  
Sat   260.40     NaN  260.40  
Sun   247.39     NaN  247.39  
Thur    3.00  168.83  171.83  
All   546.07  185.51  731.58  
交叉表:  
time  Dinner   Lunch     All  
day                           
Fri    35.28   16.68   51.96  
Sat   260.40     NaN  260.40  
Sun   247.39     NaN  247.39  
Thur    3.00  168.83  171.83  
All   546.07  185.51  731.58  
#-*- coding: utf-8 -*-
import pandas as pd

#创建透视表
def create_pivottalbe(data):
    ###### Begin ######
    df = pd.DataFrame(data)
    x = df.pivot_table(index = ['day'],columns = ['time'],values = ['tip'],aggfunc = sum , margins = True)
    return x
    ###### End ######

#创建交叉表
def create_crosstab(data):
    ###### Begin ######
    df = pd.DataFrame(data)  
    y = pd.crosstab(index = df['day'],columns = df['time'],values = df['tip'],aggfunc =sum,margins = True)
    return y
    ###### End ######

def main():
    #读取csv文件数据并赋值给data
    ###### Begin ######
    data = pd.read_csv("step2/tip.csv",header = 0)
    ###### End ######
    piv_result = create_pivottalbe(data)
    cro_result = create_crosstab(data)
    print("透视表:\n{}".format(piv_result))
    print("交叉表:\n{}".format(cro_result))

if __name__ == '__main__':
    main()

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-阿呆-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值