文科生自学Python-对比学习pivot_table和groupby透视功能
liuian 2025-01-13 15:31 42 浏览
--人生不是赛场,梦想不容退场,学习编程成就更好的自己--
Python语言简洁生动,特别适合文科生学习入门IT世界,用几十行代码就能够做一个完整的爬虫脚本,开发效率杠杠的!短时间内即可解决工作和学习中碰到的各种棘手问题。(本人外语专业毕业,机缘巧合爱上编程,自学道路曲曲折折,痛并快乐!)这里总结一下自学Python遇到的难点和重点,分享码过的代码和要点总结,希望能够给初学者一点启示和鼓励,同时愿意结交更多大神交流有助提升自己的水平。
大家平时在使用Python处理数据时基本上首选pandas库,在使用pandas清洗完数据后往往需要通过透视功能得到最终数据结果集方便生成表格和可视化图像报告,实现透视功能主要有pivot_table和groupby两种方法,今天就给大家举例来对比一下,让小伙伴们有一个基本的认识和了解,下面使用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
我为人人,人人为我!!欢迎大家关注,点赞和转发!!!
~~人生不是赛场,梦想不容退场~~不断努力学习蜕变出一个更好的自己,不断分享学习路上的收获和感悟帮助他人成就自己!!!
相关推荐
- 不用电脑怎么恢复(不用电脑怎么恢复出厂设置)
-
操作方法01方法一:通过设置重置电脑使用快捷键Windows+A,点击所有设置,点击更新系统-恢复,重置此电脑点开始。02选择仅保留我的文件,删除应用和设置,提示窗口会显示出将被删除的应用,点击下一步...
- 最强视频播放器(2020视频播放器排行榜前十名)
-
应该是MXPlayer。他是一款安卓版上十分强悍的视频播放器,他以解码性能强、兼容性高而闻名,并且,对视频字幕的支持更是堪称一绝,支持在线匹配,对特效字幕的支持也是非常的高的。作为一款优质的手机视频播...
- 三星固态驱动官网(三星固态官方软件)
-
三星手机序列号查询官网是http://www.samsung110.com/。手机序列号(S/N号)查询方法:设置-关于手机-状态-序列号(序号)。或通过以下方式查询:通过机器包装盒上的标贴查询用...
- 雨林木风u盘装机教程(雨林木风u盘装系统,步骤)
-
电脑系统安装步骤:1、用【u启动u盘启动盘制作工具】制作u启动盘,重启电脑等待出现开机画面按下启动快捷键,选择u盘启动进入到u启动主菜单,选取“【02】Win8PE装机维护版(新机器)”选项2、进...
- 无法连接到这个网络是怎么回事
-
有可能是网络本身有问题,需要联系运营商解决。也有可能是因为网卡驱动问题,首先鼠标右击开始按钮,然后点击设备管理器,双击网络适配器,最后查看网卡驱动有没有出现黄色的感叹号,如果有的话,右击选择更新驱动程...
- 刷机精灵怎么解除锁屏密码(刷机精灵怎么解除锁屏密码设置)
-
刷机精灵解锁手机锁屏密码方法:下载好刷机精灵。打开链接手机,之后在刷机精灵页面里能看到“实用工具”的选项。解除手机解锁图案要获取root权限,若没有获取的可以在这里点击获取root权限的选项。获取了...
- 联想云服务官网(联想云服务官网查找手机)
-
华为手机也是可以下载云服务软件安装然后使用联想账号登陆云服务的。部分云服务功能将无法使用。登录联想云服务方法:点开云服务软件,选择立即使用,即出现:手机号码登入,邮箱登入,第三方登入;手机号码登入,邮...
- 宏基笔记本系统重装快捷键(宏基笔记本重装系统步骤)
-
如果用系统u盘、光盘安装:1、需要在Bios中设置从u盘或光盘启动。2、启动电脑,dcer一般默认按Del键(有些型号F2、F12)进入Bios设置界面。F2键。宏碁笔记本重装系统按F2键,进入BIO...
- windows10官网打不开(win10系统官网打不开)
-
你可以通过以下步骤在Windows10官网上更新操作系统:1.打开windows官网,进入“下载和工具”页面。2.单击“立即下载工具”按钮,将下载“Windows10更新助手”。3.运行“...
- win7无线网卡插上没反应(win7无线网卡插上没反应怎么回事)
-
1、如果是路由器的问题,如果原来可以用,暂时不能用了,在有就是恢复出厂设置,从新设置就可以用了(这是在物理连接正确的前提下)。2、如果是宽带本身的问题,首先直接联接宽带网线测试,如果是宽带的问题,联系...
- 下载爱奇艺安装(下载爱奇艺安装包)
-
如果你的电脑无法安装爱奇艺,可能有以下原因,第一种原因可能是你的电脑系统版本太低,升级你的电脑操作系统,可以促进爱奇艺的下载,第二种情况是你下载的爱奇艺可能捆绑一些病毒软件,系统的杀毒软件识别有霸王软...
- 5000元左右的电脑配置单(5000左右的电脑配置推荐2021)
-
五千元至六千元价位电脑主机,如果组装机,可以配置配置很高的档次,电脑主机主板可以配置不低于十二代产品,可以设四个内存条插槽,相应的内存可以配置128GB内存条2至四根,电脑处理器也同样不低于十二代产品...
-
- 快速关机(快速关机按什么键)
-
1、我们直接长按手机右侧的电源键,大概5秒的时间,这时候手机页面会直接显示是否关机,选择关机就可以直接关机了。2、找到手机一侧的音量“+”键,再找到电源按键,之后只需同时按住音量“+”键和电源按钮,直到手机屏幕关闭即可强制关机。3、点击【设...
-
2025-12-25 08:05 liuian
- 云电脑免登录破解版(“云电脑破解版”)
-
虎牙YOWA云游戏平台便是一款完全免费的产品,只要玩家在自己的账号上购买过相关的产品即可通过云游戏平台直接登陆。但云游戏平台终归只是改变玩家的游戏方式,用户最终还是要回归于游戏中,如果难以保证游戏体验...
- 联想家庭版win7(联想家庭版笔记本电脑)
-
1、开机到欢迎界面时,按Ctrl+Alt+Delete,跳出帐号窗口,输入用户名:administrator,回车。2、如果这个帐号也有密码采用开机启动时按F8选“带命令行的安全模式”。3、选“Ad...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
