数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?

news2025/1/16 2:32:58

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!

喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力!数据源存放在我的资源下载区啦!

数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?

目录

    • 数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?
  • 1. pandas数据结构
    • 问题1:创建3个不同的Series,长度都是100。
    • 问题2:利用这3个Series作为3列创建一个DataFrame。
    • 问题3:将上面DataFrame的列名改为bedrs、bathrs和price_sqr_meter。
    • 问题4:利用上面3个Series作为1列创建一个DataFrame
    • 问题5:上面的DataFrame的index到99为止,请将其reindex为0~299。
  • 2. pandas统计
    • 问题1:删除列'Unnamed: 0' 和 'Id'。
    • 问题2:男孩和女孩的总数是多少?
    • 问题3:将数据按照Name分组统计出现数量,并按照降序排列。
    • 问题4:数据集中有多少不同名字?
    • 问题5: 出现频率最多和最少的名字是(可能数量不唯一,按排序结果)?
  • 3. pandas数据过滤与排序
    • 问题1:选择Goals列显示。
    • 问题2:多少队伍参加Euro2012?
    • 问题3:数据集中有多少列?
    • 问题4:选择Team、Yellow Cards、Red Cards三列形成新的DataFrame,命名为discipline。
    • 问题5:对discipline采用Red Cards以及Yellow Cards(先按Red Cards排再按Yellow Cards排)降序排序。
    • 问题6:计算Team的平均Yellow Cards数,四舍五入保留整数。
    • 问题7:将进球超过6(goals>6)的行找出来。
    • 问题8:找出G开头Team的所有行。
    • 问题9:选择除了最后三列以外的所有列。
    • 问题10:只显示England、Italy、Russia三队的Shooting Accuracy列。
  • 4. pandas数据分组
    • 问题1:计算每种职业的平均年龄。
    • 问题2:计算每种职业的男性占比,并从大到小排序。(难,选做)
    • 问题3: 对于每种职业,计算最小和最大年龄。
    • 问题4:按职业、性别分组,计算平均年龄。
    • 问题5:对于每种职业,显示男女性别占比。(难,选做)
  • 5. pandas函数映射
    • 问题1:切片列school到列guardian。
    • 问题2:创建lambda函数用于将字符串首字母大写,并应用到Mjob和Fjob列数据。
    • 问题3:创建函数is_legal(),并应用到数据集,返回一个新列legal_drinker,列元素值为布尔类型,True表示学生年龄大于等于17(合法饮酒),False表示小于17(不合法饮酒)。

1. pandas数据结构

import pandas as pd
import numpy as np

问题1:创建3个不同的Series,长度都是100。

- 第一个:每个元素是1~4(包含)随机整数
- 第二个:每个元素是1~3(包含)随机整数
- 第三个:每个元素是10000~20000(包含)随机整数
# 创建第一个Series,每个元素是1~4(包含)随机整数  
series1 = pd.Series(np.random.randint(1, 5, size=100))  
series1

# 创建第二个Series,每个元素是1~3(包含)随机整数  
series2 = pd.Series(np.random.randint(1, 4, size=100))  
series2

# 创建第三个Series,每个元素是10000~20000(包含)随机整数  
series3 = pd.Series(np.random.randint(10000, 20001, size=100)) 
series3

问题2:利用这3个Series作为3列创建一个DataFrame。

df = pd.DataFrame({  
    'Column1': series1,  
    'Column2': series2,  
    'Column3': series3  
})  
df.head()

问题3:将上面DataFrame的列名改为bedrs、bathrs和price_sqr_meter。

new_columns = ["bedrs","bathrs","price_sqr_meter"]
df.columns = new_columns
df.head()

问题4:利用上面3个Series作为1列创建一个DataFrame

# 使用 concat 函数将三个 Series 合并成一个新的 Series  
# ignore_index=True 参数用于重置合并后 Series 的索引  
combined_series = pd.concat([series1, series2, series3], ignore_index=True) 

combined_series

# 将 series 转化为 dataframe
df = pd.DataFrame({"Concat":combined_series})
df

问题5:上面的DataFrame的index到99为止,请将其reindex为0~299。

# 重新索引 df,使其索引从 0 到 299  
# 使用 NaN 填充新增的索引位置  
df_reindexed = df.reindex(range(300))  
  
# 打印重新索引后的 DataFrame  
df_reindexed

2. pandas统计

import pandas as pd

# 加载数据
# assets/US_Baby_Names_right.zip解压
df = pd.read_csv('assets/US_Baby_Names_right.csv') #婴儿名字数据
df.info()
df.head()

问题1:删除列’Unnamed: 0’ 和 ‘Id’。

df.drop(["Unnamed: 0","Id"],axis=1,inplace=True)
df.head()

问题2:男孩和女孩的总数是多少?

df['Gender'].value_counts()

问题3:将数据按照Name分组统计出现数量,并按照降序排列。

# 分组求和
df_groupby = df.groupby(by="Name")[["Count"]].sum()
# 排序
df_sort = df_groupby.sort_values(by="Count",ascending=False)
df_sort

问题4:数据集中有多少不同名字?

df["Name"].nunique()

问题5: 出现频率最多和最少的名字是(可能数量不唯一,按排序结果)?

# 频率最多
df_sort.head(1)

3. pandas数据过滤与排序

import pandas as pd 

# 加载数据
df = pd.read_csv('assets/Euro_2012_stats_TEAM.csv', sep = ',') # 2012欧洲杯统计数据
display(df.info())
df.head()

问题1:选择Goals列显示。

df[["Goals"]].head()

问题2:多少队伍参加Euro2012?

df["Team"].nunique()

在这里插入图片描述

问题3:数据集中有多少列?

df.shape[1]

在这里插入图片描述

问题4:选择Team、Yellow Cards、Red Cards三列形成新的DataFrame,命名为discipline。

discipline = df[["Team","Yellow Cards","Red Cards"]]
discipline.head()

问题5:对discipline采用Red Cards以及Yellow Cards(先按Red Cards排再按Yellow Cards排)降序排序。

discipline_sorted  = discipline.sort_values(by=["Red Cards","Yellow Cards"],ascending=False)
discipline_sorted.head() 

问题6:计算Team的平均Yellow Cards数,四舍五入保留整数。

discipline.groupby(by="Team")[["Yellow Cards"]].mean().round()

问题7:将进球超过6(goals>6)的行找出来。

df[df["Goals"]>6]

问题8:找出G开头Team的所有行。

df[df['Team'].str.startswith('G')] 

问题9:选择除了最后三列以外的所有列。

df.iloc[:,0:-3]

问题10:只显示England、Italy、Russia三队的Shooting Accuracy列。

selected_teams = df[df['Team'].isin(['England', 'Italy', 'Russia'])]  
  
# 只选择 "Shooting Accuracy" 列  
shooting_accuracy = selected_teams[["Team",'Shooting Accuracy']]  
  
shooting_accuracy

4. pandas数据分组

import pandas as pd 

# 加载数据
df = pd.read_csv('assets/u.user', sep = '|', index_col='user_id') # 职业数据
display(df.info())
df.head()

问题1:计算每种职业的平均年龄。

df.groupby(by="occupation").mean().head()

问题2:计算每种职业的男性占比,并从大到小排序。(难,选做)

import pandas as pd  
  
# 假设 df 是 DataFrame,包含 'Occupation' 和 'Gender' 列  
# 计算每种职业的男性数量  
male_counts = df[df['gender'] == 'M'].groupby('occupation')['gender'].count().reset_index(name='MaleCount')  
male_counts.head()

# 计算每种职业的总人数  
total_counts = df.groupby('occupation')['gender'].count().reset_index(name='TotalCount')  
total_counts.head()

# 合并两个结果,以计算男性占比  
occupation_stats = pd.merge(male_counts, total_counts, on='occupation')
occupation_stats.head()

# 计算男性占比  
occupation_stats['MalePercentage'] = (occupation_stats['MaleCount'] / occupation_stats['TotalCount']) * 100  
  
# 按男性占比从大到小排序  
occupation_stats_sorted = occupation_stats.sort_values(by='MalePercentage', ascending=False).reset_index()  
  
# 打印结果  
occupation_stats_sorted.head()

问题3: 对于每种职业,计算最小和最大年龄。

# 最小年龄,不能两个 []
df.groupby(by="occupation")["age"].min().reset_index(name='Min_Age').head()  

# 最大年龄,不能两个 []
df.groupby(by="occupation")["age"].max().reset_index(name='Max_Age').head()

问题4:按职业、性别分组,计算平均年龄。

df.groupby(by=["occupation","gender"])["age"].mean().reset_index(name= "Mean_Age").head()

问题5:对于每种职业,显示男女性别占比。(难,选做)

import pandas as pd  
  
# 假设 df 是你的 DataFrame,包含 'Occupation' 和 'Gender' 列  
# 计算每种职业的男性数量  
male_counts = df[df['gender'] == 'M'].groupby('occupation')['gender'].count().reset_index(name='MaleCount')  
male_counts.head()

# 计算每种职业的女性数量  
female_counts = df[df['gender'] == 'F'].groupby('occupation')['gender'].count().reset_index(name='FeMaleCount')  
female_counts.head()

# 合并两个结果,以计算男性女性占比  
occupation_stats = pd.merge(male_counts, female_counts, on='occupation')
occupation_stats.head()

# 计算男性占比  
occupation_stats['MalePercentage'] = (occupation_stats['MaleCount'] / (occupation_stats['MaleCount'] + occupation_stats['FeMaleCount']) ) * 100  
occupation_stats['FeMalePercentage'] = (occupation_stats['FeMaleCount'] / (occupation_stats['MaleCount'] + occupation_stats['FeMaleCount']) ) * 100  

# 按男性占比从大到小排序,并且不保留原来的索引  
occupation_stats_sorted = occupation_stats.sort_values(by='MalePercentage', ascending=False).reset_index(drop=True)  
  
# 打印结果  
occupation_stats_sorted.head()

5. pandas函数映射

import pandas as pd
import numpy

# 准备数据
df = pd.read_csv('assets/student-mat.csv') #美国学生饮酒消费数据 
display(df.info())
df.head()

问题1:切片列school到列guardian。

df.loc[:,"school":"guardian"]

问题2:创建lambda函数用于将字符串首字母大写,并应用到Mjob和Fjob列数据。

import pandas as pd  
   
# 创建一个lambda函数,用于将字符串的首字母大写  
capitalize_first_letter = lambda x: x[0].upper() + x[1:] if isinstance(x, str) else x  
  
# 应用这个函数到 'Mjob' 列  
df['Mjob'] = df['Mjob'].apply(capitalize_first_letter)  
  
# 应用这个函数到 'Fjob' 列  
df['Fjob'] = df['Fjob'].apply(capitalize_first_letter)  
  
# 查看修改后的DataFrame  
df[['Mjob', 'Fjob']]

问题3:创建函数is_legal(),并应用到数据集,返回一个新列legal_drinker,列元素值为布尔类型,True表示学生年龄大于等于17(合法饮酒),False表示小于17(不合法饮酒)。

import pandas as pd  
  
# 假设 df 是你的 DataFrame,并且它有一个名为 'age' 的列,表示学生的年龄  
  
# 定义 is_legal 函数  
def is_legal(age):  
    return age >= 17  
  
# 应用 is_legal 函数到 'age' 列,生成新的 'legal_drinker' 列  
df['legal_drinker'] = df['age'].apply(is_legal)  
  
# 查看新生成的 'legal_drinker' 列  
df.head()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1608900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vast+产品展厅 | Vastbase G100数据库是什么架构?(1)

Vastbase G100是海量数据融合了多年对各行业应用场景的深入理解,基于openGauss内核开发的企业级关系型数据库。 了解Vastbase G100的架构,可以帮助您确保数据库系统的高效、可靠和安全运行。 “Vast产品展厅”将分两期,为您详细讲解Vastbas…

创新指南|利用 AI 工具转变您的内容策略

内容策略涉及规划、创建和管理内容。无论您是在策划博客文章、社交媒体更新还是网站内容,精心制定的内容策略是营销活动成功的关键。然而,如果没有合适的工具,维持强大的内容策略可能会具有挑战性。这就是人工智能(AI) 工具发挥作用的地方&am…

微信小程序四(全局配置和页面配置页面跳转)

全局配置: 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等 tabBar设置:最少两个最多5个 "tabBar": {"list":[{"pagePath": &qu…

【机器学习300问】76、早停法(Early Stopping)是如何防止过拟合的?

本文带大家介绍一个非常简单的防止过拟合的方法——早停(Early Stopping),首先给出概念,然后通过损失图像来加深对它的理解。 一、早停是什么呀? 早停(Early Stopping)是一种常用的深度学习模型…

STM32F401RCT6电子元器件芯片LQFP64 32位微控制器MCU单片机

STM32F401RCT6微控制器具有丰富的外设接口和较高的处理能力,适用于多种嵌入式应用。以下是一些典型的STM32F401RCT6应用案例: 1. 机器人控制:STM32F401RCT6可以用于制作自动导航机器人、遥控机器人等,负责处理传感器数据、控制电…

【学习】自动化测试有哪些优势和不足

在当今这个数字化时代,软件测试已经成为了任何一款产品成功的关键因素之一。而在诸多的测试方法中,自动化测试凭借着其独特的魅力吸引着越来越多的企业。今天就让我们一起走进自动化测试的世界,探讨它的优势与不足。 一、自动化测试优势 1.…

YoutobeDNN

目录 1. 挑战 2. 系统整体结构 3.召回 4. 排序 5. 训练和测试样本的处理 1. 挑战 (1)规模。很多现有的推荐算法在小规模上效果好,但Youtobe规模很大。 (2)新颖度。Youtobe语料库是动态的,每秒都会有…

【NLP练习】使用Word2Vec实现文本分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、数据预处理 1. 任务说明 本次加入Word2Vec使用PyTorch实现中文文本分类,Word2Vec则是其中的一种词嵌入方法,是一种用于生成词向量…

vscode微博发布案例

样例: CSS代码: * {margin: 0;padding: 0; }ul{list-style: none; }.w {width: 900px;margin: 0 auto; }.controls textarea {width: 878px;height: 100px;resize: none;border-radius: 10px;outline: none;padding-left: 20px;padding-top: 10px;font-size: 18px; }.controls…

ADOP带您了解什么是光纤跳线

光纤跳线(也称为光纤连接器)是指光缆两端都装有连接器插头,用来实现光路活动连接。一端装有插头则称为光纤尾纤。光纤跳线用于从设备到光纤布线链路的跳接线,具有较厚的保护层。它在光纤通信系统、光纤接入网、光纤数据传输以及局…

【RAG 论文】面向知识库检索进行大模型增强的框架 —— KnowledGPT

论文:KnowledGPT: Enhancing Large Language Models with Retrieval and Storage Access on Knowledge Bases ⭐⭐⭐⭐ 复旦肖仰华团队工作 论文速读 KnowledGPT 提出了一个通过检索知识库来增强大模型生成的 RAG 框架。 在知识库中,存储着三类形式的知…

Nginx第3篇-使用ngx_http_proxy_connect_module配置https正向代理

场景 我使用python爬虫,然后需要个代理,所以就用Nginx搭了一个代理服务器。对Nginx也不太熟,慢慢摸索,搭建完之后发现只能代理http的请求,无法穿透https。几经折腾和摸索发现一个强大的HTTP代理模块:ngx_h…

ceph osd分组

一、前言 使用分组可以更好的管理osd,将不同类型的磁盘,分到不同的组中,例如hhd类型的osd分配到hhd组,ssd类型的osd分配到ssd组,将io要求不高的分配到hhd组做存储,io要求高的分配到ssd组做存储 二、配置 查…

李沐-16 PyTorch 神经网络基础【动手学深度学习v2】

注:1. 沐神对应章节视频出处 2.代码使用Jupyter Notebook运行更方便 3.文章笔记出处 一、层和块 层:层(1)接受一组输入, (2)生成相应的输出, (3)由一组可调整…

JVM知识点总结二

参考文章:【Java面试题汇总】JVM篇(2023版)_jvm面试题2023-CSDN博客 1、说说你了解的JVM内存模型: JVM由三部分组成:类加载子系统、运行时数据区、执行引擎 JVM内存模型: 内存模型里的运行时数据区&#…

短信登录session-redis

1.流程 1.1 发送验证码 模拟路径 http://127.0.0.1:8080/api/user/code?phone1335566 Request Method:POSTcontroller层 /*** 发送手机验证码*/PostMapping("code")public Result sendCode(RequestParam("phone") String phone, HttpSession session) {…

GitHub/R3D3项目环境配置踩坑记录

1、前言 项目链接地址:SysCV/r3d3 (github.com) 按照安装步骤容易出现的问题,environment.yaml文件中安装相关包,其中还有两个pip install githttps://github.com/..........这两个建议注释掉,后面再来安装这两个。 2、问题及解…

电脑本地搭建privateGPT流程

文章目录 前言效果所需文件流程1,python版本2,工程文件安装2.1服务端搭建2.2客户端搭建 3,模型下载 前言 当我的电脑主机在本地运行privateGPT的时候我听到了cpu风扇在呼啸, 至于privateGPT是干什么的, 其实就相当于一个文档分析软件,只不过内置了一个gpt,你把文件丟给他,你可…

鸿蒙OpenHarmony【搭建Ubuntu环境】

搭建Ubuntu环境 在嵌入式开发中,很多开发者习惯于使用Windows进行代码的编辑,比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516…

【论文源码实战】轻量化MobileSAM,分割一切大模型出现,模型缩小60倍,速度提高40倍

前言 MobileSAM模型是在2023年发布的,其对之前的SAM分割一切大模型进行了轻量化的优化处理,模型整体体积缩小了60倍,运行速度提高40倍,但分割效果却依旧很好。 MobileSAM在使用方法上沿用了SAM模型的接口,因此可以与…