建议大家多研究pandas的官方文档

透视表:

DataFrame.pivot_tablevalues = Noneindex = Nonecolumns = Noneaggfunc ='mean'fill_value = Nonemargin = Falsedropna = Truemargins_name ='All' 

创建一个电子表格样式的数据透视表作为DataFrame。数据透视表中的级别将存储在结果DataFrame的索引和列上的MultiIndex对象

参数:

values : 要聚合的列,可选

index:列,Grouper,数组或前一个列表

如果传递数组,则它必须与数据的长度相同。该列表可以包含任何其他类型(列表除外)。在数据透视表索引上分组的键。如果传递数组,则其使用方式与列值相同。

columns:列,Grouper,数组或前一个列表

如果传递数组,则它必须与数据的长度相同。该列表可以包含任何其他类型(列表除外)。在数据透视表列上分组的键。如果传递数组,则其使用方式与列值相同。

aggfunc:function,function of list,dict,default numpy.mean

如果传递的函数列表,生成的数据透视表将具有分层列,其顶层是函数名称(从函数对象本身推断)如果传递dict,则键是要聚合的列,值是函数或函数列表

fill_value:标量,默认无

用于替换缺失值的值

margin:boolean,默认为False

添加所有行/列(例如,对于小计/总计)

dropna:布尔值,默认为True

不要包含条目都是NaN的列

margins_name:string,默认为'All'

当margin为True时,将包含总计的行/列的名称。

返回:

table : DataFrame

In [7]: df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",^M...:                           "bar", "bar", "bar", "bar"],^M...:                     "B": ["one", "one", "one", "two", "two",^M...:                           "one", "one", "two", "two"],^M...:                     "C": ["small", "large", "large", "small",^M...:                           "small", "large", "small", "small",^M...:                           "large"],^M...:                     "D": [1, 2, 2, 3, 3, 4, 5, 6, 7]})...:In [8]: df
Out[8]:A    B      C  D
0  foo  one  small  1
1  foo  one  large  2
2  foo  one  large  2
3  foo  two  small  3
4  foo  two  small  3
5  bar  one  large  4
6  bar  one  small  5
7  bar  two  small  6
8  bar  two  large  7In [9]: table = pd.pivot_table(df, values='D', index=['A','B'], columns=['C'], aggfunc=np.sum)
# 通过透视表,以A,B为索引对象,以c作为列,把D作为值填充
In [10]: table
Out[10]:
C        large  small
A   B
bar one    4.0    5.0two    7.0    6.0
foo one    4.0    1.0two    NaN    6.0

再举一个例子:

import numpy as np
import pandas as pd
from pandas import Series,DataFramedf = pd.read_excel('sales-funnel.xlsx')df.head() # 查看前五行数据Account Name    Rep Manager Product Quantity    Price   Status
0   714466  Trantow-Barrows Craig Booker    Debra Henley    CPU 1   30000   presented
1   714466  Trantow-Barrows Craig Booker    Debra Henley    Software    1   10000   presented
2   714466  Trantow-Barrows Craig Booker    Debra Henley    Maintenance 2   5000    pending
3   737550  Fritsch, Russel and Anderson    Craig Booker    Debra Henley    CPU 1   35000   declined
4   146832  Kiehn-Spinka    Daniel Hilton   Debra Henley    CPU 2   65000   won# 生成透视表
# 从数据的显示来看,我们对顾客  购买的总价钱感兴趣,如何转换表格呢?
pd.pivot_table(df,index=['Name'],aggfunc='sum')Account    Price   Quantity
Name
Barton LLC  740150  35000   1
Fritsch, Russel and Anderson    737550  35000   1
Herman LLC  141962  65000   2
Jerde-Hilpert   412290  5000    2
Kassulke, Ondricka and Metz 307599  7000    3
Keeling LLC 688981  100000  5
Kiehn-Spinka    146832  65000   2
Koepp Ltd   1459666 70000   4
Kulas Inc   437790  50000   3
Purdy-Kunde 163416  30000   1
Stokes LLC  478688  15000   2
Trantow-Barrows 2143398 45000   4pd.pivot_table(df,index=['Name','Rep','Manager'])Account    Price   Quantity
Name    Rep Manager
Barton LLC  John Smith  Debra Henley    740150.0    35000.0 1.000000
Fritsch, Russel and Anderson    Craig Booker    Debra Henley    737550.0    35000.0 1.000000
Herman LLC  Cedric Moss Fred Anderson   141962.0    65000.0 2.000000
Jerde-Hilpert   John Smith  Debra Henley    412290.0    5000.0  2.000000
Kassulke, Ondricka and Metz Wendy Yule  Fred Anderson   307599.0    7000.0  3.000000
Keeling LLC Wendy Yule  Fred Anderson   688981.0    100000.0    5.000000
Kiehn-Spinka    Daniel Hilton   Debra Henley    146832.0    65000.0 2.000000
Koepp Ltd   Wendy Yule  Fred Anderson   729833.0    35000.0 2.000000
Kulas Inc   Daniel Hilton   Debra Henley    218895.0    25000.0 1.500000
Purdy-Kunde Cedric Moss Fred Anderson   163416.0    30000.0 1.000000
Stokes LLC  Cedric Moss Fred Anderson   239344.0    7500.0  1.000000
Trantow-Barrows Craig Booker    Debra Henley    714466.0    15000.0 1.333333

分组和透视表的使用:

本试验的数据是飞机延误


In [15]: import numpy as np^M...: import pandas as pd^M...: from pandas import Series,DataFrame...:...:In [16]: df = pd.read_csv('usa_flights.csv')In [17]:In [17]: df.head()
Out[17]:flight_date unique_carrier         ...          security_delay actual_elapsed_time
0  02/01/2015 0:00             AA         ...                     NaN               381.0
1  03/01/2015 0:00             AA         ...                     NaN               358.0
2  04/01/2015 0:00             AA         ...                     NaN               385.0
3  05/01/2015 0:00             AA         ...                     NaN               389.0
4  06/01/2015 0:00             AA         ...                     0.0               424.0[5 rows x 14 columns]In [18]: df.shape # 查看数据的维度
Out[18]: (201664, 14)In [22]: df.columns # 查看数据的列标签
Out[22]:
Index(['flight_date', 'unique_carrier', 'flight_num', 'origin', 'dest','arr_delay', 'cancelled', 'distance', 'carrier_delay', 'weather_delay','late_aircraft_delay', 'nas_delay', 'security_delay','actual_elapsed_time'],dtype='object')

任务一:1.通过arr_delay排序观察延误时间最长top10

In [23]: df.sort_values('arr_delay',ascending=False).head(10)

2.计算延误和没有延误的比例

In [24]: df['cancelled'].value_counts() # 计算取消航班和正常航班的总次数
Out[24]:
0    196873
1      4791
Name: cancelled, dtype: int64In [25]: df['delayed'] = df['arr_delay'].apply(lambda x: x>0) #把延误的转为数值量In [26]: df.head()

In [27]: delay_data = df['delayed'].value_counts()In [28]: delay_data
Out[28]:
False    103037
True      98627
Name: delayed, dtype: int64In [29]: delay_data[0]
Out[29]: 103037In [30]: delay_data[1] / (delay_data[0] + delay_data[1])
Out[30]: 0.4890659711202793

3.每个航空公司的延误情况


In [31]: delay_group = df.groupby(['unique_carrier','delayed'])In [32]: df_delay = delay_group.size().unstack()In [33]: df_delay
Out[33]:
delayed         False  True
unique_carrier
AA               8912   9841
AS               3527   2104
B6               4832   4401
DL              17719   9803
EV              10596  11371
F9               1103   1848
HA               1351   1354
MQ               4692   8060
NK               1550   2133
OO               9977  10804
UA               7885   8624
US               7850   6353
VX               1254    781
WN              21789  21150In [34]: import matplotlib.pyplot as pltIn [35]: df_delay.plot()

pandas数据处理实践五(透视表pivot_table、分组和透视表实战Grouper和pivot_table)相关推荐

  1. pandas数据处理实践二(排序(sort_index()、sort_values())、连接(Concatenate(连接,串联)和Combine(结合、联合))

    排序: Series的排序: Series.sort_index()按位置排序 Series.sort_index()按值排序 Series.sort_index(axis = 0,level = N ...

  2. 两表联查分组_join多表连接和group by分组

    上一篇里面我们实现了单表查询和top N查询,这一篇我们来讲述如何实现多表连接和group by分组. 一.多表连接 多表连接的时间是数据库一个非常耗时的操作,因为连接的时间复杂度是M*N(M,N是要 ...

  3. pandas数据处理实践四(时间序列date_range、数据分箱cut、分组技术GroupBy)

    时间序列: 关键函数 pandas.date_range(start = None,end = None,periods = None,freq = None,tz = None,normalize ...

  4. pandas 排序 给excel_懂Excel轻松入门Python数据分析包pandas(二十五):循环序列分组...

    此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 ...

  5. pandas数据处理实践一(简单走一遍)

    pandas处理数据简单的分为如下步骤: 读取数据-->分析数据-->处理数据-->导出数据 第一次主要是走一个流程 df1 = pd.read_csv('/path/xx.csv' ...

  6. pandas数据处理实践三(DataFrame.apply、merge、rename,数据预处理、DataFrame.drop_duplicates去重)

    通过apply.rename进行数据的预处理: DataFrame.apply(func,axis = 0,broadcast = None,raw = False,reduce = None,res ...

  7. Pandas数据处理_分组聚合_透视表交叉表

    1.分组聚合 1.1拆分数据 groupby方法的参数及其说明: #该方法提供的是分组聚合步骤中的拆分功能, #能根据索引或字段对数据进行分组.其常用参数与使用格式如下:DataFrame.group ...

  8. Python数据分析pandas之分组统计透视表

    Python数据分析pandas之分组统计透视表 数据聚合统计 Padans里的聚合统计即是应用分组的方法对数据框进行聚合统计,常见的有min(最小).max(最大).avg(平均值).sum(求和) ...

  9. 机器学习之Pandas:Pandas介绍、基本数据操作、DataFrame运算、Pandas画图、文件读取与处、缺失值处理、数据离散化、合并、交叉表和透视表、分组与聚合、案例(超长篇,建议收藏慢慢看)

    文章目录 Pandas 学习目标 1Pandas介绍 学习目标 1 Pandas介绍 2 为什么使用Pandas 3 案例: 问题:如何让数据更有意义的显示?处理刚才的股票数据 给股票涨跌幅数据增加行 ...

最新文章

  1. 不存在类型或空间名称ConfigurationManager解决办法
  2. 玩转python字体
  3. centos编译apache php mysql,在CentOS6.7中编译安装 apache php mysql
  4. 公司 邮件 翻译 培训 长难句 结课
  5. Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard
  6. ROS笔记(32) MoveIt!关节控制器
  7. Android下pm命令详解
  8. tar.gz 和 tar.bz2 详细解释
  9. 计算机扫描服务开启,扫描系统(window怎么开启扫描服务)
  10. html取消波浪线,PPT文字下划波浪线如何去掉?
  11. 快速提升网站排名的七种方法
  12. maya中英文对照_maya2011中英文对照表
  13. php的seeder是什么,使用Laravel框架的Seeder实现自动填充数据功能
  14. Element UI中的图标
  15. 日落20181125001 - UGUI组件应用之Animation和CanvasGroup制作渐现渐隐效果
  16. 私人定制——使用深度学习Keras和TensorFlow打造一款音乐推荐系统
  17. IPv6下DHCPv6协议(RFC3315)详细介绍
  18. C 碎片八 结构体amp;枚举amp;联合
  19. 代理记账公司是如何进行缴税的?
  20. 南通青鸟第一天学习心得

热门文章

  1. C#常见算法题目(面试准备)
  2. SubSonic 零代码的数据访问
  3. 伪随机算法c语言,伪随机算法实现各语言实现示例。
  4. 中琛源主要的产品是什么
  5. android程序安装空间不足,AndroidStudio提示磁盘空间不足
  6. linux 内核互斥体,内核并发控制---互斥量
  7. HTML两个查询条件,javascript – 如何在IndexedDB中查询多个条件?
  8. java项目整合mybatis_JavaWeb项目整合Spring,SpringMVC,Mybatis框架
  9. java aix_如何在AIX下安装JAVA
  10. emmap erlang_erLang学些笔记2—基本类型