利用python/pandas/numpy做数据分析(三)-透视表pivot_table

简介: 透视表,根据一个或多个键进行聚合,并根据行列上的分组键将数据分配到各个矩形区域中.import numpy as npdata=pd.

透视表,根据一个或多个键进行聚合,并根据行列上的分组键将数据分配到各个矩形区域中.

import numpy as np
data=pd.DataFrame(np.arange(6).reshape((2,3)),
                 index=pd.Index(['ohio','color'], name='state'),
                columns=pd.Index(['one','two','three'], name='number')
                            )
data
number one two three
state
ohio 0 1 2
color 3 4 5

前两个参数分别作用于行和列的索引,最后一个参数用于填充dataframe的数据列的列名

data.pivot('one','two')

这里写图片描述

首先,它会设置一个新的索引( set_index() ),然后对索引排序( sort_index() ),最后调用 unstack 。以上的步骤合在一起就是 pivot 。

官方定义:
DataFrame.pivot_table(data, values=None, index=None, columns=None, aggfunc=’mean’, fill_value=None, margins=False, dropna=True, margins_name=’All’)

data: DataFrame对象
values: 显示的列的名字,可以应用aggfunc中的函数
index: 索引
columns: 可选的, 通过额外的方法来分割你所关心的实际值,然而aggfunc被应用到values上, aggfunc默认的是mean


下面来看干货:

打开dat表,分别为users, ratings, movies

import pandas as pd
unames=['user_id','gender','age','occupation','zip']
users=pd.read_table('C:\\Users\\ecaoyng\\Desktop\\work space\\Python\\py_for_analysis\\pydata-book-master\\ch02\\movielens\\users.dat',sep='::',header=None,names=unames)
users.head()

合并三个表:

data=pd.merge(pd.merge(ratings, users),movies)
data[:10]

这里写图片描述

最简单的透视表必须有一个数据帧和一个索引

pd.pivot_table(data, index=['movie_id'])[:10]

这里写图片描述

当然也可以建两个index

pd.pivot_table(data, index=['movie_id','occupation'])

这里写图片描述

pd.pivot_table(data, index=['movie_id','occupation'],values=['rating'])

这里写图片描述

pd.pivot_table(data, index=['movie_id','occupation'],values=['rating'],columns='gender')

这里写图片描述

可以看出和value的区别了吗?colume的值作为列名了。

之后我们要drop掉NAN的数据,

mean_ratings=mean_ratings.dropna(axis=0)
mean_ratings

其中官方dropna函数为DataFrame.dropna(axis=0, how=’any’, thresh=None, subset=None, inplace=False),其中axis : {0 or ‘index’, 1 or ‘columns’}, or tuple/list thereof
Pass tuple or list to drop on multiple axes,即axis=0表示删除行,axis=1表示删除列。
当然,也可以通过fillna将缺失值填充为所需要的。

之后我打算过滤掉评论不足250条的记录,其中size()得到含有各个电影分组大小的serise对象。

ratings_by_title=data.groupby('title').size()
type(ratings_by_title)

这里写图片描述

active_titles=ratings_by_title.index[ratings_by_title >= 250]
active_titles

得到的active_titles 是索引:
这里写图片描述

然后可以在mean_ratings中选择我们所需要的行了

mean_ratings.ix[active_titles][:10]

之后可以对female的评价执行降序排列

top_female_ratings=mean_ratings.sort_values(by='F',ascending=False)

为了观察男女差别最大的电影,可以加一列diff

mean_ratings['diff']=mean_ratings['M']-mean_ratings['F']

对diff进行排序

sorted_by_diff=mean_ratings.sort_values(by='diff')

这里写图片描述

男同志喜爱的电影

sorted_by_diff[::-1][:10]

[::-1] 表示取反

回到小费数据集

tips=pd.read_csv('C:\\Users\\ecaoyng\\Desktop\\work space\\Python\\py_for_analysis_code\\pydata-book-master\\ch08\\tips.csv')
tips[:5]

这里写图片描述

tips.pivot_table(index=['sex','smoker'])

这里写图片描述

tips['tip_pct']=tips['tip']/tips['total_bill']
tips[:6]

这里写图片描述

tips.pivot_table(['tip_pct','size'], index=['sex','day'],columns='smoker')

这里写图片描述

小技巧,先画出正题框架比如 columns 是列索引名, index是行索引名等

这里写图片描述

tips.pivot_table(['tip_pct','size'], index=['sex','day'],columns='smoker',margins=True)

这里写图片描述

tips.pivot_table(['tip_pct'], index=['sex','smoker'],columns='day',margins=True,aggfunc=len)

这里写图片描述

目录
相关文章
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
847 1
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
550 0
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
1115 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
993 0
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
2201 4
数据分析的 10 个最佳 Python 库
|
数据处理 Python
在数据科学领域,Pandas和NumPy是每位数据科学家和分析师的必备工具
在数据科学领域,Pandas和NumPy是每位数据科学家和分析师的必备工具。本文通过问题解答形式,深入探讨Pandas与NumPy的高级操作技巧,如复杂数据筛选、分组聚合、数组优化及协同工作,结合实战演练,助你提升数据处理能力和工作效率。
350 5
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
654 2
|
存储 数据采集 数据处理
效率与精准并重:掌握Pandas与NumPy高级特性,赋能数据科学项目
在数据科学领域,Pandas和NumPy是Python生态中处理数据的核心库。Pandas以其强大的DataFrame和Series结构,提供灵活的数据操作能力,特别适合数据的标签化和结构化处理。NumPy则以其高效的ndarray结构,支持快速的数值计算和线性代数运算。掌握两者的高级特性,如Pandas的groupby()和pivot_table(),以及NumPy的广播和向量化运算,能够显著提升数据处理速度和分析精度,为项目成功奠定基础。
474 2
|
存储 数据处理 Python
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第27天】在科学计算和数据分析领域,Python凭借简洁的语法和强大的库支持广受欢迎。NumPy和SciPy作为Python科学计算的两大基石,提供了高效的数据处理和分析工具。NumPy的核心功能是N维数组对象(ndarray),支持高效的大型数据集操作;SciPy则在此基础上提供了线性代数、信号处理、优化和统计分析等多种科学计算工具。结合使用NumPy和SciPy,可以显著提升数据处理和分析的效率,使Python成为科学计算和数据分析的首选语言。
547 3
|
存储 机器学习/深度学习 算法
Python科学计算:NumPy与SciPy的高效数据处理与分析
【10月更文挑战第26天】NumPy和SciPy是Python科学计算领域的两大核心库。NumPy提供高效的多维数组对象和丰富的数学函数,而SciPy则在此基础上提供了更多高级的科学计算功能,如数值积分、优化和统计等。两者结合使Python在科学计算中具有极高的效率和广泛的应用。
829 2

推荐镜像

更多