任务描述
本关任务:使用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值,默认为Truemargins_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
import pandas as pd
def create_pivottalbe(data):
df = pd.DataFrame(data)
x = df.pivot_table(index = ['day'],columns = ['time'],values = ['tip'],aggfunc = sum , margins = True)
return x
def create_crosstab(data):
df = pd.DataFrame(data)
y = pd.crosstab(index = df['day'],columns = df['time'],values = df['tip'],aggfunc =sum,margins = True)
return y
def main():
data = pd.read_csv("step2/tip.csv",header = 0)
piv_result = create_pivottalbe(data)
cro_result = create_crosstab(data)
print("透视表:\n{}".format(piv_result))
print("交叉表:\n{}".format(cro_result))
if __name__ == '__main__':
main()
Original: https://blog.csdn.net/SorrymakerS/article/details/124801132
Author: -阿呆-
Title: 第2关:Pandas创建透视表和交叉表

激光雷达和IMU标定

Vue中使用speak-tts插件实现点击按钮后进行语音播报(TTS/文字转语音)

儿童的成长伴侣,dido Y03学生智能手表上手

MMsegmentation教程 2: 自定义数据集

用普通摄像头测量距离

电商用户价值分析——基于RFM模型、KMeans聚类

【Tensorflow】1.一个神经元网络

基于STM32C8T6语音数字的播报小算法

树莓派4B安装 tensorflow 2.3.0版本

2022-车道线检测综述

离线语音风扇设计应用案例

用Anaconda安装TensorFlow(Windows10)

python深度学习之TensorFlow

log4j 不同模块输出到不同的文件
