Pandas之八Reshaping(二)

简介: 聊聊透视表功能,该功能和Excel中的数据透视功能相似。pivot:对原始DataFrame进行变形整理。pivot table:可以在数据变形整理的基础上,做数据聚合操作。

前文我们聊过了数据重塑中的stackunstack,今天继续聊聊透视表功能,该功能和Excel中的数据透视功能相似。

  • pivot:对原始DataFrame进行变形整理。
  • pivot table:可以在数据变形整理的基础上,做数据聚合操作。

下面使用图中数据对其进行说明

df = pd.DataFrame(
{"A": ["foo", "foo", "foo", "foo", "foo",
       "bar", "bar", "bar", "bar"],
 "B": ["one", "one", "one", "two", "two",
       "one", "one", "two", "two"],
 "C": ["small", "large", "large", "small",
       "small", "large", "small", "small",
       "large"],
 "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
 "E": [2, 3, 4, 5, 6, 7, 8, 9, 10]
})

1. Pivot

将原始DataFrame重塑,返回一个新的DataFrame,大体变形过程如下图所示。

80a60a4624454158a75ae83b2816d7e7.png

简要说明其参数:

  • data:需要做数据透视的原始DataFrame数据
  • columns:指定一个或多个列的值作为新DataFrame的列
  • index:指定一个或多个列的值作为新DataFrame的index,注意其值不可以重复,否则报错(可选,若不填则使用现有index)
  • values:指定一个或多列的值作为新DataFrame的值(可选,若不填则使用所有剩余列)

1.1 只指定必填参数

以指定columns为例,以B列的值作为新DataFrame的列名,会默认将其余所有列作为values,缺失值以np.nan替代。

可以理解为:原index不变,而以B列中的onetwo来作为列名,展示DataFrame中所有的数据。

pd.pivot(df, columns="B")

1.2 指定所有参数

# 批定index时,注意该列的值不可重复
# 指定一列时,该列值不可重复;指定多列时,第一列的值不可重复。
pd.pivot(df, columns="B", 
         values="D", index=["E","C"])

2. Pivot Table

使用pivot只能对数据进行变形整理,有时还需要做新的数据做聚合分析,就可以使用pivot table,大体逻辑如下图。

该方法参数比较多,简单对其进行说明:

  • data:需要做数据透视的原始DataFrame数据
  • values:一列或多列做聚合处理的列名
  • index:在数据透视表index上进行分组的列,与pivot不同的是此处列中的值可以重复,因为会做聚合
  • columns: 在数据透视表列上进行分组的列
  • aggfunc: 将要应用的聚合函数,默认是计算均值 numpy.mean

datavaluesindexcolumns的用法与pivot基本一致,主要说一说aggfunc

2.1 指定一个聚合函数

对数据透视表中的DE的数据做求和计算

pd.pivot_table(df,values=["D","E"], 
               index=["A"], 
               columns=["C"],
               aggfunc=np.sum)

2.2 指定多个聚合函数

对所有数据,同时做求和和平均值计算

pd.pivot_table(df,values=["D","E"], 
               index=["A"], 
               columns=["C"],
               aggfunc=[np.sum,np.mean])

2.3 各value列指定不同聚合函数

D列的值做求和,对E列的值计算平均值

pd.pivot_table(df,values=["D","E"], 
               index=["A"], 
               columns=["C"],
               aggfunc={"D":np.sum,"E":np.mean})

目录
相关文章
|
9月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的仓库在线管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的仓库在线管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
|
机器学习/深度学习 传感器 算法
智能优化算法-纵横交叉算法附matlab代码
智能优化算法-纵横交叉算法附matlab代码
|
存储 前端开发 JavaScript
当后端一次性丢给你10万条数据, 作为前端工程师的你,要怎么处理?
前段时间有朋友问我一个他们公司遇到的问题, 说是后端由于某种原因没有实现分页功能, 所以一次性返回了2万条数据,让前端用select组件展示到用户界面里. 我听完之后立马明白了他的困惑, 如果通过硬编码的方式去直接渲染这两万条数据到select中,肯定会卡死. 后面他还说需要支持搜索, 也是前端来实现,我顿时产生了兴趣. 当时想到的方案大致如下:
1081 1
|
机器学习/深度学习 自然语言处理
ConvBERT:使用基于区间的动态卷积来提升BERT
ConvBERT:使用基于区间的动态卷积来提升BERT
325 0
ConvBERT:使用基于区间的动态卷积来提升BERT
|
存储
Seata 配置中心实现原理
Seata 可以支持多个第三方配置中心,那么 Seata 是如何同时兼容那么多个配置中心的呢?下面我给大家详细介绍下 Seata 配置中心的实现原理
340 0
Seata 配置中心实现原理
|
iOS开发
iOS中使用本地通知为你的APP添加提示用户功能(一)
iOS中使用本地通知为你的APP添加提示用户功能
223 0
|
Python 调度 数据采集
一篇文章搞定Python多进程(全)
公众号:pythonislover 前面写了三篇关于python多线程的文章,大概概况了多线程使用中的方法,文章链接如下: 一篇文章搞懂Python多线程简单实现和GIL - https://mp.weixin.
3555 0

热门文章

最新文章