用Python实现数据的透视表的方法

作者:moxigandashu 时间:2022-10-11 22:16:54 

在处理数据时,经常需要对数据分组计算均值或者计数,在Microsoft Excel中,可以通过透视表轻易实现简单的分组运算。而对于更加复杂的分组运算,Python中pandas包可以帮助我们实现。

1 数据

首先引入几个重要的包:


import pandas as pd
import numpy as np
from pandas import DataFrame,Series

通过代码构造数据集:


data=DataFrame({'key1':['a','b','c','a','c','a','b','a','c','a','b','c'],'key2':['one','two','three','two','one','one','three','one','two','three','one','two'],'num1':np.random.rand(12),'num2':np.random.randn(12)})

得到数据集如下:


data
key1 key2  num1  num2
0 a one 0.268705 0.084091
1 b two 0.876707 0.217794
2 c three 0.229999 0.574402
3 a two 0.707990 -1.444415
4 c one 0.786064 0.343244
5 a one 0.587273 1.212391
6 b three 0.927396 1.505372
7 a one 0.295271 -0.497633
8 c two 0.292721 0.098814
9 a three 0.369788 -1.157426

2 交叉表—分类计数

按照不同类进行计数统计是最常见透视功能,可以通

(1)crosstab


#函数:
crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)

crosstab的index和columns是必须要指定复制的参数:


pd.crosstab(data.key1,data.key2)

结果如下:


key2 one three two
key1    
a  3  1 1
b  0  1 1
c  1  1 1

想要在边框处增加汇总项可以指定margin的值为True:


pd.crosstab(data.key1,data.key2,margins=True)

结果:


key2 one three two All
key1      
a  3  1 1 5
b  1  1 1 3
c  1  1 2 4
All  5  3 4 12

(2)pivot_table

函数:


pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

使用pivot_table函数同样可以实现,运算函数默认值aggfunc='mean',指定为aggfunc='count'即可:


data.pivot_table('num1',index='key1',columns='key2',aggfunc='count')

结果相同:


key2 one three two
key1    
a  3  1 1
b  1  1 1
c  1  1 2

(3)groupby

通过groupby相对来说会更加复杂,首先需要对data按照key1和key2进行聚类,然后进行count运算,再将key2的index重塑为columns:


data.groupby(['key1','key2'])['num1'].count().unstack()

结果:


key2 one three two
key1    
a  3  1 1
b  1  1 1
c  1  1 2

3 其它透视表运算

(1)pivot_table


pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

要进行何种运算,只需要指定aggfunc即可。

默认计算均值:


data.pivot_table(index='key1',columns='key2')

out:


  num1       num2    
key2  one  three  two  one  three  two
key1              
a  0.193332 0.705657 0.203155 -0.165749 2.398164 -1.293595
b  0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530
c  0.496993 0.033673 0.206028 -0.115093 0.024650 0.077726

分类汇总呢并求和:


data.pivot_table(index='key1',columns='key2',aggfunc='sum')

结果:


  num1       num2    
key2  one  three  two  one  three  two
key1              
a  0.579996 0.705657 0.203155 -0.497246 2.398164 -1.293595
b  0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530
c  0.496993 0.033673 0.412055 -0.115093 0.024650 0.155452

也可以使用其它自定义函数:


#定义一个最大值减最小值的函数
def max_min (group):
return group.max()-group.min()

data.pivot_table(index='key1',columns='key2',aggfunc=max_min)

结果:


  num1     num2    
key2  one three two  one three  two
key1            
a  0.179266 0.0 0.000 3.109405 0.0 0.000000
b  0.000000 0.0 0.000 0.000000 0.0 0.000000
c  0.000000 0.0 0.177 0.000000 0.0 1.609466

(2)通过groupby

普通的函数如mean,sum可以直接应用:

data.groupby(['key1','key2']).mean().unstack()

返回结果:


  num1       num2    
key2  one  three  two  one  three  two
key1              
a  0.193332 0.705657 0.203155 -0.165749 2.398164 -1.293595
b  0.167947 0.204545 0.661460 0.555850 -0.522528 0.143530
c  0.496993 0.033673 0.206028 -0.115093 0.024650 0.077726

来源:https://blog.csdn.net/moxigandashu/article/details/69486269#3-其它&#-28657;&#-30266;&#-30616;&#-28720;算

标签:Python,数据,透视表
0
投稿

猜你喜欢

  • 使用Webpack构建多页面程序的实现步骤

    2024-04-23 09:06:27
  • Python数据类型转换汇总

    2023-05-13 16:33:00
  • Python Pyecharts绘制桑基图分析用户行为路径

    2022-06-07 02:47:57
  • Python __slots__的使用方法

    2023-11-19 16:15:10
  • Python print函数:如何将对象打印输出

    2023-03-26 23:07:16
  • 常用python数据类型转换函数总结

    2023-07-27 23:07:16
  • JS实现针对给定时间的倒计时功能示例

    2024-04-16 09:46:57
  • Mootools 1.2教程(18)——Class 类(第一部分)

    2008-12-19 12:45:00
  • python爬虫爬取快手视频多线程下载功能

    2021-10-29 09:24:04
  • Python实现视频裁剪的示例代码

    2022-07-20 07:14:14
  • python 创建一个空dataframe 然后添加行数据的实例

    2022-05-08 01:51:59
  • 在Golang中执行Shell命令的教程详解

    2024-04-25 15:10:51
  • 如何使用django的MTV开发模式返回一个网页

    2023-07-04 21:47:06
  • ASP动态包含文件的改进方法

    2009-01-05 12:22:00
  • 简单易懂的python环境安装教程

    2023-05-21 14:39:16
  • Python 中的反转字符串reversed(),切片

    2021-05-27 15:03:06
  • Python爬取腾讯疫情实时数据并存储到mysql数据库的示例代码

    2024-01-23 08:52:28
  • 详解Python用三种方式统计词频的方法

    2021-02-10 13:30:12
  • asp更改Windows2000管理者密码?

    2010-06-26 11:03:00
  • Linux添加Python path方法及修改环境变量的三种方法

    2021-03-26 12:22:45
  • asp之家 网络编程 m.aspxhome.com