返回顶部
首页 > 资讯 > 后端开发 > Python >Pandas数据分析之pandas数据透视表和交叉表
  • 707
分享到

Pandas数据分析之pandas数据透视表和交叉表

2024-04-02 19:04:59 707人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录前言整理透视 pivot 聚合透视 Pivot Table 聚合透视高级操作交叉表crosstab()数据融合melt()数据堆叠 stack前言 panda

前言

pandas对数据框也可以像excel一样进行数据透视表整合之类的操作。主要是针对分类数据进行操作,还可以计算数值型数据,去满足复杂的分类数据整理的逻辑。

首先还是导入包:

import numpy as np
import pandas as pd

整理透视 pivot 

首先介绍的是最简单的整理透视函数pivot,其原理如图:

pivot参数:

  • index:新 df 的索引列,用于分组,如果为None,则使用现有索引
  • columns:新 df 的列,如果透视后有重复值会报错
  • values:用于填充 df 的列。 如果未指定,将使用所有剩余的列,并且结果将具有按层次结构索引的列

用法如下,首先生成案例数据df

df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two', 'two'],
                   'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
                   'baz': [1, 2, 3, 4, 5, 6],
                   'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
df

df.pivot(index='foo', columns='bar', values='baz')

可以看到是一一对应。简单来说就是把foo、bar两个分类变量整到行列名称上去了,baz作为值

# 多层索引,可以取其中一列
df.pivot(index='foo', columns='bar') #['baz']

# 指定值
df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])

聚合透视 Pivot Table

上面的pivot只适用于一一对应的情况,如果分类变量的组合一样,但是取值不一样就会报错。此时应该用Pivot Table,他默认计算相同情况的均值。

参数:

  • data: 要透视的 DataFrame 对象
  • values: 要聚合的列或者多个列
  • index: 在数据透视表索引上进行分组的键
  • columns: 在数据透视表列上进行分组的键
  • aggfunc: 用于聚合的函数, 默认是 numpy.mean'''
df = pd.DataFrame({"A": ["a1", "a1", "a1", "a2", "a2","a2"],
                   "B": ["b2", "b2", "b1", "b1", "b1","b1"],
                   "C": ['c1','c1','c2','c2','c1','c1'],
                   "D": [1, 2, 3, 4, 5, 6]})
df

#索引a,列b使用Pivot会报错,因为他们之间的组合有重复,要用Pivot Table,默认计算均值
pd.pivot_table(df,index='A',columns='B',values='D')

#验证一下b1,a2这个均值5
df.loc[(df.A=='a2')&(df.B=='b1')].D.mean()

 聚合透视高级操作

pd.pivot_table(df,index=['A','B'],#指定多个索引
               columns=['C'],  #指定列
               values='D', #数据值列
               aggfunc=np.sum, #聚合函数
               fill_value=0, #空值填充
               margins=True  #增加汇总列
              )

 #多个计算方法

pd.pivot_table(df,index=['A','B'],#指定多个索引
               columns=['C'],  #指定列
               values='D', #数据值列
               aggfunc=[np.sum,np.mean,np.std]
              )

交叉表crosstab()

交叉表是用于统计分组频率的特殊透视表。简单来说,就是将两个或者多个列重中不重复的元素组成一个新的 DataFrame,新数据的行和列交叉的部分值为其组合在原数据中的数量

语法结构如下:

pd.crosstab(index, columns, values=None, rownames=None,colnames=None, aggfunc=None, margins=False,
margins_name: str = 'All', dropna: bool = True,nORMalize=False) #→ 'DataFrame'

参数说明:

index:数组,在行中按分组的值。
columns:类数组的值,用于在列中进行分组。
values:类数组的,可选的,要根据因素汇总的值数组。
aggfunc:函数,可选,如果未传递任何值数组,则计算频率表。
rownames:序列,默认为None,必须与传递的行数组数匹配。
colnames:序列,默认值为None,如果传递,则必须与传递的列数组数匹配。
margins:布尔值,默认为False,添加行/列边距(小计)
normalize:布尔值,{'all','index','columns'}或{0,1},默认为False。 通过将所有值除以值的总和进行归一化。'

生成案例数据:

df = pd.DataFrame({"A": ["a1", "a1", "a1", "a2", "a2","a2"],
                   "B": ["b2", "b2", "b1", "b1", "b1","b1"],
                   "C": ['c1','c1','c2','c2','c1','c1'],
                   "D": [1, 2, 3, 4, 5, 6]})
df

pd.crosstab(df['A'],df['B'])  #都是分类数据,计算频率

pd.crosstab(df['A'],df['C']) #都是分类数据

#对交叉结果进行归一化:
pd.crosstab(df['A'], df['B'], normalize=True)

#对每列进行归一化:
pd.crosstab(df['A'], df['B'], normalize='columns')

#聚合,指定列做为值,并将这些值按一定算法进行聚合:
pd.crosstab(df['A'], df['C'], values=df['D'], aggfunc=np.sum) #分类和数值

#边距汇总,在最右边增加一个汇总列:
pd.crosstab(df['A'], df['B'],values=df['D'],aggfunc=np.sum,
            normalize=True,margins=True)

数据融合melt()

#df.melt() 是 df.pivot() 逆转操作函数。简单说就是将指定的列放到铺开放到行上名为variable(可指定)列,值在value(可指定)列 

语法结构:

具体语法结构如下:

pd.melt(frame: pandas.core.frame.DataFrame,id_vars=None, value_vars=None,
        var_name='variable', value_name='value',col_level=None)

其中:

  • id_varstuple:list或ndarray(可选),用作标识变量的列。
  • value_varstuple:列表或ndarray,可选,要取消透视的列。 如果未指定,则使用未设置为id_vars的所有列。
  • var_namescalar:用于“变量”列的名称。 如果为None,则使用frame.columns.name或“variable”。
  • value_namescalar:默认为“ value”,用于“ value”列的名称。
  • col_levelint或str:可选,如果列是MultiIndex,则使用此级别来融化。

生成案例数据:

df=pd.DataFrame({'A':['a1','a2','a3','a4','a5'],
                'B':['b1','b2','b3','b4','b5'],
                'C':[1,2,3,4,5]})
df

pd.melt(df)

#指定标识和值,
pd.melt(df,id_vars=['A'])  #只对BC展开

pd.melt(df,value_vars=['B','C']) #保留BC,并展开

#同时指定,并命名
pd.melt(df,id_vars=['A'],value_vars=['B'],var_name='B_label',value_name='B_value') 

数据堆叠 stack

#stack就是把列变量堆到行上,unstack就是行变到列上

生成案例数据 :

#堆叠 stack 单层索引:
df = pd.DataFrame({'A':['a1','a1','a2','a2'],
                  'B':['b1','b2','b1','b2'],
                  'C':[1,2,3,4],
                  'D':[5,6,7,8],
                  'E':[5,6,7,8]})
df.set_index(['A','B'],inplace=True)
df

 stack 堆叠

df.stack()

 unstack 解堆

df.stack().unstack()

df.stack().unstack().unstack()

df.stack().unstack().unstack().unstack()

 可以看到,解堆就是不停地把列变量弄到行上去作为索引。

到此这篇关于Pandas数据分析之pandas数据透视表和交叉表的文章就介绍到这了,更多相关pandas数据透视表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Pandas数据分析之pandas数据透视表和交叉表

本文链接: https://lsjlt.com/news/119951.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Pandas数据分析之pandas数据透视表和交叉表
    目录前言整理透视 pivot 聚合透视 Pivot Table 聚合透视高级操作交叉表crosstab()数据融合melt()数据堆叠 stack前言 panda...
    99+
    2024-04-02
  • 数据分析处理库Pandas——数据透视表
    数据 按指定的行列值显示 求和 按行求和 按列求和 数据 求平均 备注:按性别计算每个等级船票的平均价格。 备注:每个等级船舱中每种性别获救的平均值,也就是获救的比例。 备注:每种性别未成年人获救的平均值...
    99+
    2023-01-31
    数据 透视 Pandas
  • Python+Pandas实现数据透视表
    目录导入示例数据参数说明常用操作大家好,我是丁小杰。 对于数据透视表,相信对于 Excel 比较熟悉的小伙伴都知道如何使用它,并了解它的强大之处,而在pandas中要实现数据透视就要...
    99+
    2024-04-02
  • 怎么使用Python+Pandas实现数据透视表
    这篇文章主要介绍了怎么使用Python+Pandas实现数据透视表的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python+Pandas实现数据透视表文章都会有所收获,下面我们一起来看看吧。导入示例数...
    99+
    2023-07-02
  • Pandas数据分析之pandas文本处理
    目录前言文本数据类型字符操作文本格式文本对齐​文本计数和编码格式判断文本高级处理文本分割 文本切片选择 slice划分 partition文本替换指定位置替换重复替换文本连...
    99+
    2024-04-02
  • python数据分析之pandas数据选
      Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用。本文主要介绍Pandas的几种数据选取的方法。   Pandas中,数据主要保存为Dataframe和Series是数据结构,这两种数据结构数据...
    99+
    2023-01-30
    数据 python pandas
  • 数据分析之pandas模块
          一、Series   类似于一位数组的对象,第一个参数为数据,第二个参数为索引(索引可以不指定,就默认用隐式索引) Series(data=np.random.randint(1,50,(10,))) Series(data...
    99+
    2023-01-30
    模块 数据 pandas
  • 数据分析利器之Pandas
    Pandas是一个python的开源库,它基于Numpy,提供了多种高性能且易于使用的数据结构。Pandas最初被用作金融数据分析工具而开发,由于它有着强大的功能,目前广泛应用于数据分析、机器学习以及量化投资等。下面来跟随作者一起认识下Pa...
    99+
    2023-06-02
  • 数据分析之Pandas VS SQL!
    编辑:zone来源:数据管道作者:艾德宝器AbstractPandas是一个开源的Python数据分析库,结合 NumPy 和 Matplotlib 类库,可以在内存中进行高性能的数据清洗、转换、分析及可视化工作。对于数据开发工程师或分析师...
    99+
    2023-06-02
  • Python数据分析之pandas读取数据
    一、三种数据文件的读取 二、csv、tsv、txt 文件读取 1)CSV文件读取: 语法格式:pandas.read_csv(文件路径) CSV文件内容如下: import pandas as pd file...
    99+
    2022-06-02
    python pandas读取数据 pandas数据读取
  • python数据分析之怎么用pandas搞定Excel表格
    本篇内容主要讲解“python数据分析之怎么用pandas搞定Excel表格”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python数据分析之怎么用pandas搞定Excel表格”吧!(一)读...
    99+
    2023-06-30
  • Python数据分析库之pandas,你
    写这个系列背后的故事 咦,面试系列的把基础部分都写完啦,哈哈答,接下来要弄啥嘞~ pandas吧 外国人开发的 翻译成汉语叫 熊猫 厉害厉害,很接地气 一个基于numpy的库 干啥的? 做数据分析用的 而数据分析是python体系下一个...
    99+
    2023-01-31
    数据 Python pandas
  • MySQL数据透视表的示例分析
    这篇文章主要为大家展示了“MySQL数据透视表的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL数据透视表的示例分析”这篇文章吧。我有一张这样的...
    99+
    2024-04-02
  • Pandas数据透视的函数如何使用
    这篇文章主要介绍了Pandas数据透视的函数如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Pandas数据透视的函数如何使用文章都会有所收获,下面我们一起来看看吧。pandas.melt()melt函数...
    99+
    2023-07-02
  • Pandas数据分析-pandas数据框的多层索引
    目录前言创建多层索引 多层索引操作 索引名称的查看 索引的层级 索引内容的查看数据查询 数据分组前言 pandas数据框针对高维数据...
    99+
    2024-04-02
  • Python数据分析之pandas函数详解
    目录一、apply和applymap二、排序三、处理缺失数据一、apply和applymap 1. 可直接使用NumPy的函数 示例代码: # Numpy ufunc 函数 df...
    99+
    2024-04-02
  • 100天精通Python(数据分析篇)——第66天:Pandas透视表基础+实战案例(pivot_table函数)
    文章目录 一、透视表基础参数说明+实战案例 0. 导入Excel数据 1. data 2. index 3. values 4. columns ...
    99+
    2023-09-07
    python pandas 数据分析
  • Python高级数据分析之pandas和matplotlib绘图
    目录一、matplotlib 库二、Pandas绘图1.绘制简单的线型图1.1)简单的Series图表示例 .plot()1.2) 两个Series绘制的曲线可以叠加2.数据驱动的线...
    99+
    2024-04-02
  • Python数据分析之pandas比较操作
    目录一、比较运算符和比较方法二、两个DataFrame比较三、两个Series比较四、与数字或字符串比较五、与array进行比较一、比较运算符和比较方法 比较运算符用于判断是否相等和比较大小,Python中的比较运算...
    99+
    2022-06-02
    Python pandas比较操作 python pandas比较运算符
  • 【Pandas数据处理100例目录】Python数据分析玩转Excel表格数据
    前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ ...
    99+
    2023-08-31
    python pandas 数据分析 深度学习
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作