文章目录
- 第1关:Pandas 分组聚合
- 第2关:Pandas 创建透视表和交叉表
第1关:Pandas 分组聚合
编程要求
使用 Pandas 中的 read_csv() 函数读取 step1/drinks.csv 中的数据,数据的列名如下表所示,请根据 continent 分组并求每个大洲红酒消耗量的最大值与最小值的差以及啤酒消耗量的和。在右侧编辑器 Begin-End 内补充代码。
列名 说明
country 国家名
beer_servings 啤酒消耗量
spirit_servings 白酒消耗量
wine_servings 红酒消耗量
total_litres_of_pure_alcohol 纯酒精总量
continent 大洲名
测试说明
平台会对你编写的代码进行测试:
测试输入:无;
预期输出:
wine_servings beer_servings
continent
Africa 233 3258
Asia 123 1630
Europe 370 8720
North America 99 3345
Oceania 212 1435
South America 220 2101
开始你的任务吧,祝你成功!
示例代码如下:
import pandas as pd
import numpy as np
'''
返回最大值与最小值的和
'''
def sub(df):######## Begin #######return df.max() - df.min()######## End #######
def main():######## Begin #######data = pd.read_csv("step1/drinks.csv")df = pd.DataFrame(data)mapping = {"wine_servings":sub,"beer_servings":np.sum}print(df.groupby("continent").agg(mapping))######## End #######
if __name__ == '__main__':main()
第2关:Pandas 创建透视表和交叉表
编程要求
使用 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 ######return data.pivot_table(index=["day"],values=["tip"],columns=["time"],margins=True,aggfunc=sum)###### End #######创建交叉表
def create_crosstab(data):###### Begin ######return pd.crosstab(index=[data.day],columns=[data.time],values=data.tip,aggfunc=sum ,margins=True)###### End ######def main():#读取csv文件数据并赋值给data###### Begin ######data = pd.read_csv("step2/tip.csv")###### 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()