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

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.mzph.cn/diannao/766.shtml

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

相关文章

【不看后悔】AGI时代,这些工具真的能让你收入翻倍!

引言 在数字化浪潮中,AIGC已经成为不可或缺的一部分 无论你是一名内容创作者,还是简单的社交媒体用户,免费的AI工具都能在多个层面助你一臂之力。这些工具涵盖从文本创作到图像设计,再到视频制作等多个方面,不仅可以…

Amazon云计算AWS之[1]基础存储架构Dynamo

文章目录 Dynamo概况Dynamo架构的主要技术主要问题及解决方案Dynamo的存储节点数据均衡分布的问题一致性哈希算法改进一致性哈希算法 数据备份数据冲突问题成员资格及错误检测容错机制临时故障处理机制永久性故障处理机制 Dynamo概况 面向服务的Amazon平台基本架构为了保证其稳…

C语言学习/复习24---

一、指针的进阶 1.指针的类型 2.字符指针 注意事项1:数组名是首元素地址,指针变量存储地址 3.指针数组 4.数组指针 注意事项1:&数组名与数组名 案例1:数组地址与数组首元素地址 数组地址的使用: ​​​…

理解字符串常量池(JVM)

大纲 思考 如何查看字符串常量池(StringTable)? 使用 jclasslib 插件打开字节码,选择 常量池 -> 显示所选 -> CONSTANT_String_info,左侧过滤后的内容即为字符串常量池 字符串常量池、方法区、永久代和元空间的…

如何将你的iOS应用成功上架App Store(图文详解)

上架基本需求资料 1、苹果开发者账号(如还没账号先申请- 苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestFlight测试然后提交审核的完整流程! …

草稿 | word格式的网址索引

参考文献引用 参考文献上标设置:(改为上标的快捷键为ctrlshift“”) https://jingyan.baidu.com/article/cbcede07d786c743f50b4d47.html 多个参考文献一起引用: https://blog.csdn.net/neptune4751/article/details/119921187 交…

社交媒体数据恢复:与你科技

在数字时代,数据是我们生活中的重要组成部分。无论是个人照片、文档,还是企业的重要资料,数据在我们的生活中扮演着举足轻重的角色。然而,数据丢失的问题时常发生,给我们带来了很多麻烦。幸运的是,当下众多…

UE4 拍摄、保存并浏览相册

效果: 1.新建CameraActor类 2.修改截图保存路径 3.编写BP_Camera蓝图 注意路径 Save Image函数要在执行拍照和BeginPlay事件执行一次 按钮执行拍摄事件 3.编写UMG蓝图 技巧:让Index加1、减1循环赋值 4.把BP_Camera挂在玩家上

步步精科技获得发明型专利,提升Type-C连接器行业竞争力

在电子科技日新月异的时代,连接器作为电子设备中不可或缺的一部分,其安全性、稳定性和性能水平直接关系到设备的使用效果和用户体验。深圳市步步精科技有限公司(以下简称“步步精科技”)一直致力于连接器领域的技术创新和产品研发…

Ubuntu上阅读Android源码工具

由于Android源码过于庞杂,里面有多种语言源文件,想只用一IDE统一索引是不现实的。我个人便使用AS阅读JAVA代码,VS看C/C代码,在Ubuntu上不能使用SI,所以直接放弃。在framework开发这个层面上来讲,因为大部分…

vue中使用水印

1. 在utils下创建watermark.js const watermark {}/**** param {要设置的水印的内容} str* param {需要设置水印的容器} container* param {需要设置水印的每一块的宽度} canWidth* param {需要设置水印的每一块的高度} canHeight* param {需要设置水印的字体} canFont* para…

Qt - 窗口

目录 1. 前言 2. 菜单栏(QMenuBar) 2.1. 创建菜单栏 2.1.1. 方式一 2.1.2. 方式二 2.2. 在菜单栏中添加菜单和创建菜单项 2.3. 在菜单项之间添加分割线 2.4. 综合示例 3. 工具栏(QToolBar) 3.1. 创建工具栏 3.2. 设置停靠位置 3.2.1. 方式一 3.2.2. 方式二 3.3. 设…

桥接模式【结构型模式C++】

1.概述 桥接模式是一种结构型设计模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&am…

go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

Linux中的tail命令 tail 命令是一个在 Unix/Linux 操作系统上用来显示文件末尾内容的命令。它可以显示文件的最后几行内容,默认情况下显示文件的最后 10 行。tail 命令 非常有用,特别是在我们查看日志文件或者监视文件变化时。 基本用法如下&#xff1a…

Flume在大数据集群下的配置以及监控工具Ganglia的部署安装

前提:需要有三台虚拟机(hadoop102,103,104)配置好相关基础环境 安装 将安装包上传到/opt/software中 tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/修改 apache-flume-1.9.0-bin 的名称为 flume mv /opt/module/…

element table加减列

// 有个特别注意的地方,下面这行代码,key一定绑的是item,千万不要绑定index,不然就会出现异常 //<el-table-column v-for"(item,index) in titleList" :key"item" min-width"150" align"center"><el-table fit :data"d…

从智能家居到智能城市:物联网中的隐私和安全风险

随着科技的不断进步&#xff0c;智能设备和物联网&#xff08;IoT&#xff09;技术已经逐渐渗透到我们的生活中。从智能家居设备到智能城市的实现&#xff0c;这些设备和技术可以让我们的生活变得更加便捷和高效。但是&#xff0c;这些设备也带来了不可忽视的隐私和安全风险。 …

【QT进阶】Qt Web混合编程之html、 js的简单交互

往期回顾 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用&#xff08;图文并茂超详细介绍&#xff09;-CSDN博客【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView&#xff08;图文并茂超详细版本&…

奇怪的 NRST 管脚异常复位问题

1. 引言 本文探讨一个奇怪的 MCU NRST 管脚异常复位现象。 2. 复位问题及排查 这个问题是客户对开发的平台做 EMS 浪涌测试的时候发生的&#xff0c; 平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的 EMS 测试中&#xff0c; 客户发现 MCU 有时候会异常复位而影响平台的…

Linux驱动开发笔记(一)字符驱动

文章目录 前言一、字符设备驱动程序框架二、基本原理1. 设备号的申请与归还2. 保存file_operations接口3. 设备节点的创建和销毁4. 创建文件设备4.1 mknod4.2 init_special_incode( )函数 5. 查找file_operation接口函数速查表 三、程序编写1. 模块初始化及关闭2. 文件操作方式…