长宽格式的转换

宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1、id2、var1、var2、var3,一行可以表示多个度量变量的值。

而长格式是指在一行中,除了标识变量(id_vars),其他列是variable和name,从宽格式转换为长格式,会使得数据行数增加,直观上看,这种格式的数据比较长,举个例子,列名是:id1、id2、variable、value,一行只表示一个度量变量的值。

在宽格式转换为长格式的过程中,宽格式中的多个度量变量进行了分裂,使得长格式中的每一行,实际上,只表示一个度量变量的值。

有如下宽数据:

>>> df = pd.DataFrame({'idA': {0: 'a', 1: 'b', 2: 'c'},
... 'varB': {0: 1, 1: 3, 2: 5},
... 'varC': {0: 2, 1: 4, 2: 6}})
>>> df
idA varB varC
0 a 1 2
1 b 3 4
2 c 5 6

1,融合数据(melt)

把数据从宽格式转换为长格式

DataFrame.melt(self, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数注释:

  • id_vars:作为标识变量的列
  • value_vars:作为值的列
  • var_name:默认值是variable,对长格式中度量变量的列名所在的列进行命名
  • value_name:默认值是value,对长格式中度量变量的列值所在的列进行命名
  • col_level:如果列是MultiIndex,使用这个level的索引进行melt

举个例子,把示例中的宽数据转换为长数据,id列是idA,度量变量是varB,得到如下长数据:

>>> df.melt(id_vars='idA',value_vars='varB')
idA variable value
0 a varB 1
1 b varB 3
2 c varB 5

id列是idA,度量变量是varB和varC,得到如下长数据:

>>> df.melt(id_vars='idA',value_vars=['varB','varC'])
idA variable value
0 a varB 1
1 b varB 3
2 c varB 5
3 a varC 2
4 b varC 4
5 c varC 6

2,重塑数据(pivot)

把数据从长格式转换为宽格式,返回按照特定的index或column重塑的DataFrame:

DataFrame.pivot(self, index=None, columns=None, values=None)

参数注释:

  • index:用于创建新DataFrame的索引,相当于分组列,相同索引的行称为一个小分组。
  • columns:根据columns指定的列值来创建新DataFame的列名,使用该参数指定的列来创建结果的列名。
  • values:和columns对应,表示相应列的列值,用于填充结果列的列值

重塑数据的流程:

  • 根据index的唯一值进行分组,
  • 把columns指定的列的唯一值作为结果的列名,即,列的值作为结果的列名
  • 把values对应的列值作为新列名的值,即,把列的值作为结果中对应列的值

举个例子,有如下长格式的数据:

>>> df=df.melt(id_vars='idA',value_vars=['varB','varC'])
>>> df
idA variable value
0 a varB 1
1 b varB 3
2 c varB 5
3 a varC 2
4 b varC 4
5 c varC 6

使用pivot把长格式转换为宽格式,按照idA列进行分组,把variable的列值作为结果的列名,把values的列值作为结果列的值:

>>> df.pivot(values='value',columns='variable',index='idA')
variable varB varC
idA
a 1 2
b 3 4
c 5 6

重塑的数据包含行索引idA,列标签varB和varC,其中variable是列标签的name。

使用reset_index()函数把行索引转换为列,其中variable是列索引的名称:

>>> df.pivot(values='value',columns='variable',index='idA').reset_index()
variable idA varB varC
0 a 1 2
1 b 3 4
2 c 5 6

透视表(pivot_table)

透视表是指按照特定的index和columns进行聚合操作之后的表,该函数和pivot函数的行为相似,只不过会对值进行聚合操作:

DataFrame.pivot_table(self, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False)

参数注释:

  • values:聚合的列
  • index:分组器,作为结果的索引
  • columns:分组器,作为结果的列
  • aggfunc:聚合的函数
  • fill_value:用于填充缺失值的值
  • margins:bool,默认值是True,把所有行或列的值加和,计算subtotal(小组和)或grand total(总合)
  • margins_name:str,默认值是All,当margins为Ture时,为每个汇总设置名称。
  • observed:boolean, default False,仅适用于分组器是分类索引的。

例如,对长数据进行重塑,获得透视表:

>>> df.pivot_table(values='value',index='idA',columns='variable',aggfunc='mean')
variable varB varC
idA
a 1 2
b 3 4
c 5 6

参考文档:

pandas DataFrame

pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)的更多相关文章

  1. 04. Pandas 3| 数值计算与统计、合并连接去重分组透视表文件读取

    1.数值计算和统计基础 常用数学.统计方法 数值计算和统计基础 基本参数:axis.skipna df.mean(axis=1,skipna=False)  -->> axis=1是按行来 ...

  2. pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)

    DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...

  3. pandas 学习 第5篇:DataFrame - 访问数据框

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...

  4. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

  5. Pandas 学习 第9篇:DataFrame - 数据的输入输出

    常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...

  6. pandas 学习 第14篇:索引和选择数据

    数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...

  7. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

  8. pandas 学习 第1篇:pandas基础 - 数据结构和数据类型

    pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...

  9. pandas 学习 第十一篇:处理缺失值

    Pandas中的缺失值是指nan.None和NaT.如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项: pandas.options.mode.use_inf_as_na = T ...

随机推荐

  1. C语言程序设计100例之(18):火柴棒等式

    例18   火柴棒等式 用n根火柴棍,可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棒拼出的整数(若该数非零,则最高位不能是0).用火柴棒拼数字0~9的拼法如图1所示. 图1  用 ...

  2. Python Weekly 419

    文章,教程或讲座 如何用 Dropbox Security 构建用于日志系统的威胁检测和事件响应的工具 https://blogs.dropbox.com/tech/2019/10/how-dropb ...

  3. IT兄弟连 HTML5教程 CSS3揭秘 CSS常见的样式属性和值5

    CSS综合实例 在Web页面中经常使用栏目显示分类内容.本例将使用HTML和CSS结合编写一个分类栏目模型,用于演示前面介绍的CSS应用.通过使用独立的文件定义样式表,并在HTML文档中使用link标 ...

  4. 前端笔记之微信小程序(一)初识微信小程序&WXSS与CSS|WXML与HTML的差异&像素和DPR

    一.小程序概述 2017 年 1 月 9 日小程序正式上线,腾讯开放了个人开发者开发小程序,小程序从此就开始火爆,这一年,小程序狂揽 4 亿用户.1.7 亿的日常活跃,上线 58 万个.这是一个巨大的 ...

  5. JavPlayer:AI破坏马赛克,大量马赛克破坏版影片流出

    这是最近几个月业界讨论比较火的话题,发酵到现在, 终于可以给大家总结下最近的马赛克破坏版影片到底是怎么回事? 马赛克破坏版,简单讲就是利用AI技术,在打有马赛克影片的马赛克基础上进行修复操作, 来实现 ...

  6. redis的embstr编码

    问题来了 今天在看书籍<Redis设计与实现>的时候,在8.2字符串对象里面写到 如果字符串对象保存的是一个字符串值, 并且这个字符串值的长度大于 39 字节, 那么字符串对象将使用一个简 ...

  7. 【Hash一致性算法】什么是Hash一致性算法

    目录 1. 一致性Hash算法简介 环形Hash空间 把数据通过一定的hash算法处理后映射到环上 将机器通过hash算法映射到环上 机器的删除与添加 平衡性 本文转载自博客 1. 一致性Hash算法 ...

  8. 记录一次Mac VSCode运行Grpc模板项目

    1.使用dotnet new grpc -o GrpcGreeter && cd GrpcGreeter && code . ,进入项目文件中,使用code .使用vs ...

  9. itextsharp操作pdf——插入图片、二维码等

    简单介绍 业务需求,需要往pdf图纸上添加二维码功能,将实现过程记录下来 下载类库 直接下载 添加引用 添加命名空间 using System.IO; using iTextSharp.text.pd ...

  10. PHP bcpow BC数学函数

    定义和用法 bcpow - 任意精度数字的乘方 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 语法 bcpow( string $left_operand , string $right_ ...