Python数据处理利器,pivot与melt让表格变得灵活

news/2024/9/18 15:04:20/ 标签: python, 开发语言

大家好,在数据分析和处理过程中,数据的重塑是一个非常常见且重要的操作。数据重塑能够从不同的角度观察数据,以更符合分析需求的方式来呈现数据。在Python的Pandas库中,pivotmelt是两种强大的数据重塑工具,能够轻松地在宽表(Wide Format)和长表(Long Format)之间转换数据。本文将介绍Pandas中的pivotmelt方法,帮助掌握这些技巧,通过丰富的示例代码,在实际项目中灵活应用。 

1.数据重塑概述

数据重塑指的是改变数据集的结构或形状,使得数据能够以另一种形式呈现。常见的重塑操作包括将数据从宽表转为长表,或者从长表转为宽表。

  • 宽表(Wide Format):数据表中有多个列,每一列代表不同的变量或时间点。

  • 长表(Long Format):数据表中的每一行代表一个观测值,通常包括一个分类变量(如时间、类别)和一个度量变量。

pivotmelt是Pandas中用于执行这些重塑操作的核心方法。

2.Pandas中的pivot函数

pivot函数用于将长表转为宽表。这种操作通常涉及到将某一列的值作为新表的列名,同时将另一列的值作为新表的行标签。

2.1 基本用法

pivot函数的基本语法如下:

python">df.pivot(index='行标签列', columns='列标签列', values='值列')
  • index:用于生成行标签的列。

  • columns:用于生成列标签的列。

  • values:在新表中填充数据的列。

python">import pandas as pd# 创建一个示例DataFrame
data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles'],'Temperature': [30, 35, 28, 32]
}df = pd.DataFrame(data)# 使用pivot将长表转换为宽表
pivot_df = df.pivot(index='Date', columns='City', values='Temperature')
print(pivot_df)

输出结果:

python">City       Los Angeles  New York
Date                              
2023-01-01           35        30
2023-01-02           32        28

在这个示例中,将Date列作为行标签,将City列作为列标签,而Temperature列则填充了新表中的数据。结果是一个宽表,其中每个城市在不同日期的温度值成为独立的列。

2.2 处理重复值

在某些情况下,pivot操作会遇到重复值,这时需要指定如何处理这些重复数据。通常可以使用pivot_table函数,它提供了更灵活的功能来处理重复数据。

python"># 创建一个包含重复值的示例DataFrame
data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-01'],'City': ['New York', 'New York', 'New York', 'Los Angeles', 'Los Angeles'],'Temperature': [30, 28, 28, 32, 33]
}df = pd.DataFrame(data)# 使用pivot_table处理重复值,取平均值
pivot_table_df = df.pivot_table(index='Date', columns='City', values='Temperature', aggfunc='mean')
print(pivot_table_df)

输出结果:

python">City       Los Angeles  New York
Date                              
2023-01-01           33        29
2023-01-02           32        28

在这个示例中,pivot_table通过aggfunc参数指定了聚合函数mean来处理重复值,从而在转换时取重复值的平均值。

3.Pandas中的melt函数

melt函数用于将宽表转换为长表,这种操作通常将多个列的值合并到一个单独的列中,同时生成新的变量列。

3.1 基本用法

melt函数的基本语法如下:

python">df.melt(id_vars=['保留列'], value_vars=['待合并列'], var_name='新变量列名', value_name='新值列名')
  • id_vars:在转换过程中保留的列。

  • value_vars:要合并的列,未指定时默认使用所有其他列。

  • var_name:新变量列的名称。

  • value_name:新值列的名称。

python"># 使用pivot生成宽表
pivot_df = df.pivot(index='Date', columns='City', values='Temperature')# 使用melt将宽表转换回长表
melted_df = pivot_df.reset_index().melt(id_vars=['Date'], var_name='City', value_name='Temperature')
print(melted_df)

输出结果:

python">         Date        City  Temperature
0  2023-01-01  Los Angeles         35.0
1  2023-01-02  Los Angeles         32.0
2  2023-01-01     New York         30.0
3  2023-01-02     New York         28.0

在这个示例中,使用melt将前面生成的宽表转换回长表,其中Date列被保留,City列和Temperature列分别生成新的变量和值列。

3.2 多列melt

melt函数还可以处理多列的合并,这在我们需要同时合并多个变量时非常有用。

python"># 创建一个包含多个值列的示例DataFrame
data = {'Date': ['2023-01-01', '2023-01-02'],'New York_Temperature': [30, 28],'Los Angeles_Temperature': [35, 32],'New York_Humidity': [70, 65],'Los Angeles_Humidity': [60, 58]
}df = pd.DataFrame(data)# 使用melt将多个列合并
melted_df = df.melt(id_vars=['Date'], var_name='Variable', value_name='Value')
print(melted_df)

输出结果:

python">         Date               Variable  Value
0  2023-01-01  New York_Temperature     30
1  2023-01-02  New York_Temperature     28
2  2023-01-01  Los Angeles_Temperature     35
3  2023-01-02  Los Angeles_Temperature     32
4  2023-01-01  New York_Humidity       70
5  2023-01-02  New York_Humidity       65
6  2023-01-01  Los Angeles_Humidity     60
7  2023-01-02  Los Angeles_Humidity     58

在这个示例中,将温度和湿度数据分别合并到一个长表中,这样的数据格式便于进一步分析或绘图。

3.3 pivot和melt结合使用

在实际数据处理中,经常需要将pivotmelt结合使用,先通过pivot将数据转为宽表,然后通过melt将数据还原为长表或进一步处理。

python"># 创建初始长表数据
data = {'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],'City': ['New York', 'Los Angeles', 'New York', 'Los Angeles'],'Temperature': [30, 35, 28, 32],'Humidity': [70, 60, 65, 58]
}df = pd.DataFrame(data)# 1. 使用pivot生成宽表
pivot_df = df.pivot(index='Date', columns='City', values=['Temperature', 'Humidity'])
print("宽表形式:\n", pivot_df)# 2. 使用melt将宽表转换为长表
melted_df = pivot_df.reset_index().melt(id_vars=['Date'], var_name=['Measurement', 'City'], value_name='Value')
print("\n还原后的长表形式:\n", melted_df)

输出结果:

python">宽表形式:Temperature  Humidity         
City   Los Angeles New York Los Angeles New York
Date                                          
2023-01-01           35       30           60       70
2023-01-02           32       28           58       65还原后的长表形式:Date Measurement        City  Value
0  2023-01-01  Temperature  Los Angeles     35
1  2023-01-02  Temperature  Los Angeles     32
2  2023-01-01  Temperature     New York     30
3  2023-01-02  Temperature     New York     28
4  2023-01-01     Humidity  Los Angeles     60
5  2023-01-02     Humidity  Los Angeles     58
6  2023-01-01     Humidity     New York     70
7  2023-01-02     Humidity     New York     65

在这个例子中,先使用pivot将数据从长表转换为宽表形式,然后再使用melt将宽表还原为长表。这种灵活的转换方式在复杂数据处理中非常有用。

综上所述,本文介绍了在Python Pandas库中使用pivotmelt进行数据重塑的技巧。通过具体示例展示如何利用pivot将数据从长表转换为宽表,以及使用melt将宽表还原为长表,这些操作在数据分析、数据清洗和可视化准备中非常关键,还介绍了pivot_table的高级用法,特别是在处理重复值时的应用。此外,本文展示了如何在实际项目中结合使用pivotmelt,在数据处理中更加灵活和高效地操作数据结构。掌握这些技巧,将极大提升数据处理能力,能够轻松应对各种复杂的分析需求。


http://www.ppmy.cn/news/1525260.html

相关文章

软件测试学习笔记丨Postman实战练习

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/32096#h-22 二、实战练习 2.1 宠物商店接口文档分析 接口文档:http://petstore.swagger.io ,这是宠物商店接口的 swagger 文档。 2.1.1 什么是 swagger Swagger 是…

数学基础 -- 线性代数之奇异值

奇异值与其应用 1. 奇异值定义 对于任意的矩阵 A A A(可以是方阵或非方阵),存在三个矩阵 U U U、 Σ \Sigma Σ 和 V V V,使得: A U Σ V T A U \Sigma V^T AUΣVT 其中: U U U 是一个 m m m \ti…

使用 BentoML快速实现Llama-3推理服务

介绍 近年来,开源大模型如雨后春笋般涌现,为自然语言处理领域带来了革命性的变化。从文本生成到代码编写,从机器翻译到问答系统,开源大模型展现出惊人的能力,吸引了越来越多的开发者和企业投身其中。 然而&#xff0…

lvs命令介绍

华子目录 lvs命令介绍lvs软件ipvsadm相关信息ipvsadm命令lvs集群中的增删改管理集群服务lvs中的增删改增加单个删除全部删除清空计数器修改实例 管理集群中RS的增删改增加删除修改 lvs命令介绍 lvs软件ipvsadm相关信息 程序包:ipvsadm服务名:ipvsadm.s…

LDR6020,单C口OTG,充放一体新潮流!

PD(Power Delivery)芯片实现单Type-C接口输入和输出OTG(On-The-Go)功能,主要是通过支持USB Power Delivery规范和OTG功能的特定硬件和软件设计来实现的。以下是对这一过程的具体解释: 一、PD芯片基础功能 …

vue3 动态 svg 图标使用

前言 在做后台管理系统中,我们经常会用到很多图标,比如左侧菜单栏的图标 当然这里 element-ui 或者 element-plus 组件库都会提供图标 但是在有些情况下 element-ui 或者 element-plus 组件库提供的图标满足不了我们的需求时,这个时候我们就需要自己去网上找一些素材或者…

【Tools】Prompt Engineering简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样 🎵 方芳《摇太阳》 大模型中的Prompt Engineering是指为了提高大模型在特定任…

Python教程(二十) : 十分钟入门【PyQt6】

文章目录 专栏列表环境准备1 安装 Python2 安装 PyQt6 创建 PyQt6 项目1 创建项目目录2 创建主 Python 文件 代码书写测试流程1 导入 PyQt6 模块2 创建主窗口类3 创建应用程序实例并运行 核心解析:PyQt6 中的模块示例代码: PyQt6 常用的控件1. QPushButt…

python selenium 显示等待 + EC

python selenium 显示等待 EC expected_conditions是selenium的一个模块,主要用于对页面元素的加载进行判断,包括元素是否存在,可点击等等。 presence_of_element_located(locator)方法:判断一个元素存在于页面中,存…

OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(二)

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ OpenHarmony(鸿蒙南向开发)——轻量系统芯片移植指南(一) Op…

2024-09-11 gdb

回顾 静态库安装指令 sudo yum install -y glibc-static sudo yum install -y libstdc-staticLinux调试器:gdb debug->添加调试信息 release->取消调试信息 gcc/g默认是release,debug:-g 1. gdb的基本命令 l(list) 10 main code.c…

无人机动力系统设计之电调芯片参数选型

无人机动力系统设计之电调芯片参数选型 1. 源由2. 关键因素2.1 电压范围2.2 电流处理能力2.3 控制方式2.4 PWM输出与分辨率2.5 通讯接口2.6 保护功能2.7 支持霍尔传感器与无传感器模式2.8 集成度与外围器件2.9 效率与散热2.10 市场供应与成本 3. 因素阐述3.1 PWM工作频率3.1.1 …

开源FormCreate低代码表单组件的配置项和事件的详解

在使用开源FormCreate低代码表单时,您可以通过各种 props 来定制表单的行为和外观。这些参数允许您控制表单的生成规则、配置选项、双向数据绑定等,为复杂的表单场景提供了强大的支持。 源码地址: Github | Gitee FormCreate组件Props 以下是常用的 pr…

Ubuntu 安装最新 Google Chrome 浏览器

谷歌浏览器使用简单并且用户友好,使用它浏览互联网愉悦至极。许多用户喜欢 Chrome,因为它加载网页又快又流畅。Chrome 提供强大的安全功能,帮助用户保持在线安全。Google Chrome 官方提供了一个 Debian 软件包存储库,基于 Debian …

reg和wire的区别 HDL语言

文章目录 数据类型根本区别什么时候要定义wire小结 数据类型 HDL语言有三种数据类型:寄存器数据类型(reg)、线网数据类型(wire)、参数数据类型(parameter)。 根本区别 reg: 寄存器…

Stable Diffusion绘画 | 生成高清多细节图片的各个要素

在数字艺术领域,AI绘画技术已经逐渐成为艺术创作的新趋势。Stable Diffusion作为一款领先的AI绘画工具,以其生成高清多细节图片的能力备受关注。现在,让我们一起来探索Stable Diffusion生成高清多细节图片的各个要素,开启你的创意…

【鸿蒙】HarmonyOS NEXT星河入门到实战5-基础语法

目录 一、字符串拼接 1.1 常规字符串拼接 1.2 模板字符串hello(符号在键盘的tab上面) 二、类型转换 (数字和字符串) 2.1 字符串转数字 2.2 数字转字符串 三、交互 3.1 点击事件 3.2 状态管理 3.3 计数器案例 四、运算符 4.1 算数运算符 4.2 赋…

五、TOGAF(架构内容框架)

TOGAF架构内容框架(Architecture Content Framework) TOGAF架构内容框架是TOGAF的一个重要组成部分,它提供了标准化的方法来描述企业架构。架构内容框架帮助架构师创建、管理和使用架构工件(Artifacts),这些…

C++之打造my vector篇

目录 前言 1.参照官版,打造vector的基本框架 2.丰富框架,实现接口方法 基本的迭代器实现 数据的[]访问 容量和数据空间的改变 vector空间大小的返回与判空 数据的增删 数据打印 拷贝构造和赋值重载 3.扩展延伸,深度理解代码 迭代器…

1.单例模式

目录 简介 饿汉式 懒汉式 双重检测锁式 静态内部类式 枚举单例 测试 测试单例模式: 测试五种单例模式在多线程环境下的效率 问题(拓展) 例:反射破解单例模式 例:反序列化破解单例模式 总结:如何…