百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

文科生自学Python-对比学习pivot_table和groupby透视功能

liuian 2025-01-13 15:31 35 浏览

--人生不是赛场,梦想不容退场,学习编程成就更好的自己--

Python语言简洁生动,特别适合文科生学习入门IT世界,用几十行代码就能够做一个完整的爬虫脚本,开发效率杠杠的!短时间内即可解决工作和学习中碰到的各种棘手问题。(本人外语专业毕业,机缘巧合爱上编程,自学道路曲曲折折,痛并快乐!)这里总结一下自学Python遇到的难点和重点,分享码过的代码和要点总结,希望能够给初学者一点启示和鼓励,同时愿意结交更多大神交流有助提升自己的水平。

大家平时在使用Python处理数据时基本上首选pandas库,在使用pandas清洗完数据后往往需要通过透视功能得到最终数据结果集方便生成表格和可视化图像报告,实现透视功能主要有pivot_tablegroupby两种方法,今天就给大家举例来对比一下,让小伙伴们有一个基本的认识和了解,下面使用kaggle网站上公布的一个消费数据集合作为案例来展示:

切换路径读取数据并查看整体字段信息:

切换路径:

读取数据整体字段信息:

文本字段主要包括:教育程度,婚姻状况,注册时间;数值字段主要包括:家庭年收入,家中孩童数量,两年内购买红酒支出和两年内购买肉类支出等。

查看数据前5行为后续处理和分析做好准备:

考虑添加一些新字段,比如通过出生年份得到年龄分层,还可添加注册人数字段,在家孩童需要把小朋友和少年字段求和等:

添加新的字段并查看结果:

从结果来看成功添加了年龄分层字段,注册年份和注册人数等,方便后续展开分析:

使用pivot_table做透视提取数据结果-一维查询:

根据年龄层和教育程度进行分类,查看了年收入平均水平,购买肉和酒的平均支出,家庭孩子平均数和注册人数总和,注意:生成的透视结果列字段顺序基本上以首字母为准

使用groupby做透视提取数据结果-一维查询:

可以看到使用groubpy也得到了相同的结果,小伙伴们可根据自己的喜好和习惯进行选择,这里对比看出groupby方法代码量更简洁一些,同时还可根据需求来调整字段顺序,如下面所示:

调整字段顺序如下:

使用pivot_table做透视提取数据结果-二维交叉查询:

这里引入了columns参数后就得到了二维交叉查询,玩转excel透视表的小伙伴们一定很熟悉吧:

使用groupby做透视提取数据结果-二维交叉查询:

这里需要两步走,第一步生成一维查询表:

第二步通过unstack()方法变成二维交叉查询表:

使用pivot_table做较复杂透视查询:

这里用pivot_table来透视一下,加一点难度和复杂度:

代码汇总如下:

#Import necessary packages
import pandas as pd
import numpy as np
import datetime
import os
import re
def Set_Work_Path(x):
    try:
        os.chdir(x)
        route = os.getcwd()
        return route
    except Exception:
        print("No Result")
work_path = r"E:\DATA\03SEP21-Pandas"
Set_Work_Path(work_path)

#Load and Check data info
data = pd.read_excel("marketing_campaign.xlsx",sheet_name="marketing_campaign",header=0,index_col=None)
display(data.dtypes)

#Check the general condition of the data
display(data.head())

#Add more useful fields for further analysis
#Define a function to sort people with age
def Get_Rating_Age(x):
    #Get the current year with datetime 
    current_year = datetime.datetime.today().year
    if (current_year - x) >= 60:
        return "老年组"
    elif(current_year - x)>= 40:
        return "中年组"
    elif(current_year - x)>= 18:
        return "青年组"
    else:
        return "少年组"
#Get the new field to sort our people with age groups
data["年龄层"] = data["Year_Birth"].apply(Get_Rating_Age)
#Get the total figure of the children in family
data["孩子数"] = data["Kidhome"] + data["Teenhome"]
data["注册日期"]= pd.to_datetime(data["Dt_Customer"])
data["注册年份"]= data["注册日期"].dt.year.astype(str)
data["注册人数"] = 1
display(data.head())
#display(data.dtypes)

#get pivot with pivot_table 通过pivot_table来生成透视表
pivot_age = pd.pivot_table(data,index=["年龄层","Education"],values=["孩子数","Income","MntWines","MntMeatProducts","注册人数"],\
                           aggfunc={"孩子数":np.mean,"Income":np.mean,"MntWines":np.mean,"注册人数":np.sum,"MntMeatProducts":np.mean},\
                           fill_value=0)
pivot_age["Income"]= pivot_age["Income"].astype(int) #Change float into int
pivot_age["MntMeatProducts"]= pivot_age["MntMeatProducts"].astype(int) #Change float into int
pivot_age["MntWines"]= pivot_age["MntWines"].astype(int) #Change float into int
pivot_age["孩子数"]= pivot_age["孩子数"].round(1) #Change float with 0.1 as unit
display(pivot_age)

#get pivot with groupby and the same with above with pivot_table 通过groupby来生成透视表
data_groupby = data.groupby(["年龄层","Education"]).\
               agg({"Income":np.mean,"MntMeatProducts":np.mean,"MntWines":np.mean,"孩子数":np.mean,"注册人数":np.sum})
data_groupby["Income"] = data_groupby["Income"].astype(int)
data_groupby["MntMeatProducts"] = data_groupby["MntMeatProducts"].astype(int)
data_groupby["MntWines"] = data_groupby["MntWines"].astype(int)
data_groupby["孩子数"] = data_groupby["孩子数"].round(1)
display(data_groupby)

#get pivot with groupby and adjust the columns 通过groupby可以调整透视表的列顺序
data_groupby = data.groupby(["年龄层","Education"]).\
               agg({"注册人数":np.sum,"孩子数":np.mean,"Income":np.mean,"MntMeatProducts":np.mean,"MntWines":np.mean})
data_groupby["Income"] = data_groupby["Income"].astype(int)
data_groupby["MntMeatProducts"] = data_groupby["MntMeatProducts"].astype(int)
data_groupby["MntWines"] = data_groupby["MntWines"].astype(int)
data_groupby["孩子数"] = data_groupby["孩子数"].round(1)
display(data_groupby)

#get pivot with pivot_table 通过pivot_table来生成透视表,并生成交叉查询表
pivot_enrollment_year = pd.pivot_table(data,index=["注册年份"],columns=["Education"],values=["Income","注册人数"],\
                           aggfunc={"Income":np.mean,"注册人数":np.sum},\
                           fill_value=0,margins=False)
pivot_enrollment_year["Income"]= pivot_enrollment_year["Income"].astype(int) #Change float into int
display(pivot_enrollment_year)

#get pivot with groupby and adjust the columns 通过groupby可以调整透视表的列顺序
data_groupby_enrollment_year = data.groupby(["注册年份","Education"]).\
               agg({"Income":np.mean,"注册人数":np.sum})
data_groupby_enrollment_year["Income"] =data_groupby_enrollment_year["Income"].astype(int)
display(data_groupby_enrollment_year)
data_groupby_target = data_groupby_enrollment_year.unstack()
display(data_groupby_target)

#get pivot with pivot_table 通过pivot_table来生成透视表
pivot_marital_data = pd.pivot_table(data,index=["Marital_Status"],values=["Income","注册人数"],\
                           aggfunc={"Income":np.sum,"注册人数":np.sum},\
                           fill_value=0,margins=True)
pivot_marital_data["Income"]= pivot_marital_data["Income"].astype(int) #Change float into int
pivot_marital_data["平均收入"]= (pivot_marital_data["Income"]/pivot_marital_data["注册人数"]).astype(int)
pivot_marital_data.reset_index(inplace=True)
pivot_marital_data.sort_values(by=["Income"],ascending=False,inplace=True)
display(pivot_marital_data)

最后的透视案例生成了分组求和项,同时根据透视表结果做了字段计算,并且根据收入情况进行了排序展示,其实透视功能非常实用和方便,大家只要多写多用就一定会总结出规律和方法,在处理更复杂的需求时就会迎刃而解了!!!!

END

我为人人,人人为我!!欢迎大家关注,点赞和转发!!!

~~人生不是赛场,梦想不容退场~~不断努力学习蜕变出一个更好的自己,不断分享学习路上的收获和感悟帮助他人成就自己!!!

相关推荐

一个win10密钥能激活几台电脑

零售版的密钥只能激活一台电脑,VOL版的能够批量激活。切实而今根基上用东西的人比较多,那样比较便当,提议也能够碰运气。软件可以正确辨认用户计较机上布置的悉数office版本和windows版本,包括w...

电脑城买电脑(电脑城买电脑装了盗版系统)

不太靠谱。首先电脑城的电脑同个款式配置很凌乱,要么来个阉割版、要么来个升级版,而所谓升级往往会以次充好,为的就是让你觉得少花了钱还买到了更好的配置。其次电脑城的销售人员大部分都是那种半懂的非专业人员,...

win11很多游戏不兼容(win11不兼容的游戏)

据我们了解,Windows11系统和传奇游戏之间没有直接的冲突或不兼容问题。然而,可能有一些间接的原因导致此问题。首先,传奇游戏是一款老游戏,可能需要在Windows11系统上运行一些兼容性设置或...

华为路由器登录(华为路由器登录入口手机版)

华为路由器的登录地址是192.168.3.1,电脑/手机连接到华为路由器的网络后,在浏览器中输入192.168.3.1,就能进入登录入口。然后输入登录密码,可以进入华为路由器的设置页面。华为wifi设...

固态硬盘的缺点(固态硬盘缺点和坏处)

1.价格与容量  固态硬盘的容量和价格都要比机械硬盘贵  2.物理特性  固态硬盘无噪音,抗震动,体积小,发热量低,功耗也非常低,工作温度范围很大!固态硬盘的内部并没有任何机械活动部件,没有马达和风...

联想自带系统怎么重装(联想电脑自带系统如何重装系统)

联想电脑重装系统步骤:1、制作好U盘启动盘,然后把下载的联想win7系统iso文件直接复制到U盘的GHO目录下:2、在联想电脑上插入U盘,重启后不停按F12或Fn+F12快捷键打开启动菜单,选择U盘项...

电脑设置自动关机软件(电脑设置自动关机程序)
  • 电脑设置自动关机软件(电脑设置自动关机程序)
  • 电脑设置自动关机软件(电脑设置自动关机程序)
  • 电脑设置自动关机软件(电脑设置自动关机程序)
  • 电脑设置自动关机软件(电脑设置自动关机程序)
笔记本亮度调节快捷键(调亮笔记本电脑屏幕亮度快捷键)

在键盘最上一排“F”打头的键中,标有小太阳的就是调节亮度的快捷键。“小太阳-”是调低,“小太阳+”是调高。有些笔记本电脑直接按这个键就可以调节,有些需要同时按住Fn(一般Fn在键盘左下角,ctrl右...

手机一键还原(iphone手机一键还原)

如果你希望恢复华为手机上的一键锁屏功能,你可以按照以下步骤进行操作:1.进入设置:在你的华为手机上,打开设置应用程序。你可以在应用抽屉中找到该应用,通常是一个齿轮或者包含「设置」字样的图标。2.寻...

系统修复u盘(优盘系统修复)

1、我们在网络中,找到修复软件U盘烧录修复(PortFreeProductionProgram)v3.27,记得不需要太高级的版本,这个比较好用。  2、打开软件,出现的页面是,初始状态下,看到...

sony笔记本u盘启动快捷键(索尼笔记本u盘快速启动键)

索尼笔记本按assist按键快捷键进入u盘启动索尼笔记本进入U盘启动的步骤:1、索尼笔记本位于键盘右上角有一个ASSIST的按键,首先按这个键就可以进入vaiocare的设置。2、通过按ASSIST...

win7旗舰版密匙(正版win7旗舰版密钥)

一、Windows7旗舰版激活密钥零售版:Windows7UltimateRetail永久序列号【尝试联网激活,如果不能激活,可电话激活】[Key]:RHTBY-VWY6D-QJRJ9-JGQ...

ip怎么改地址(怎么改ip地区)
  • ip怎么改地址(怎么改ip地区)
  • ip怎么改地址(怎么改ip地区)
  • ip怎么改地址(怎么改ip地区)
  • ip怎么改地址(怎么改ip地区)
一键ghost备份还原工具绿色版硬盘版

可以的。1.打开GHOST软件,接受许可协议,点击OK。2.从图像中选择Local→Partition→,3.选择镜像文件所在的分区,找到镜像文件(winxp.gho),然后单击enter。4.显示镜...

2010office官方下载免费完整版
  • 2010office官方下载免费完整版
  • 2010office官方下载免费完整版
  • 2010office官方下载免费完整版
  • 2010office官方下载免费完整版