HankCui

Pandas———数据透视表和交叉表

    Excel高级功能还是不太懂,如数据透视表、函数等。 在数据处理方面, 既然Excel能做的,那当然Python的pandas应该也能完成。总结下Pandas是如何完成数据透视表和交叉表的。
 
 
  1. 数据透视表
            数据透视表是一种常见的数据汇总工具,根据一个或者多个键对数据进行聚合,并根据行、列分组将数据分配到各个矩形区域。pandas.DataFrame中含有pivot_table方法、pandas.pivot_table来实现数据透视表。
    pandas.DataFrame.pivot_table函数参数:
pivot_table(self, values=None, index=None, columns=None, aggfunc=\'mean\', fill_value=None, margins=False, dropna=True, margins_name=\'All\')
 
# values  :     合并的列,需要聚合的列
# index   :      要聚合的列
# columns :     用与分组的列名,可以理解为列索引名
# aggfunc :     聚合函数
# fill_value:    缺失值填充
# dropna :      boolean, default = True, 当前列都为NaN时,整列丢弃。
# margins:       boolean, default =  False ,  当margins=True, 增加列/行总计
# margins_name   string , default = \'All\',  设定margin列名
 
 
 
            我选用的是fifa19的数据集, 从多个列中挑选了7个列,且排除了评分75以下的球员
 

 

import numpy as np
import pandas as pd
fifa_df = pd.read_csv(\'data.csv\')
fifa_df.shape # 源数据维度(18207, 89)
selected_data = fifa_df[[u\'ID\',u\'Name\', u\'Age\',u\'Nationality\',u\'Club\',u\'Potential\',u\'Overall\']]
selected_data = selected_data[selected_data[u\'Overall\'] > 75]   # 评分75以上球员
selected_data.head()            # 查看数据前几行
用Club筛选球员
selected_data.pivot_table(index= [u\'Club\'])  #  aggfunc 默认是 aggfunc=\'mean\', 所以求的是均值
 
Club 和 Nationality 筛选
selected_data.pivot_table(index= [u\'Nationality\', u\'Club\'])  
 
    我想看具体球员名称, 就要在index中添加 u‘Name’, 查看阿根廷球员在哪些俱乐部
selected_data.pivot_table(index= [u\'Nationality\', u\'Club\', u\'Name\'])
selected_data.pivot_table(index= [u\'Nationality\', u\'Club\', u\'Name\']).loc[\'Argentina\'] 
 
 
下图来解释 pivot_table 函数参数的位置关系
 
  •  query查询分析
        我已经生成了数据透视表,  我要查看拉齐奥有哪些球员,如何查询呢?
table = selected_data.pivot_table(index= [u\'Nationality\', u\'Club\', u\'Name\'], values=[u\'Age\', u\'Overall\', u\'Potential\'])
table.query(\'Club==["Lazio"]\')
 
 
  1. 交叉表
            交叉表是一种特殊的pivot_table, 同于统计分组频率。
     文档里的crosstab函数如下:
 
crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name=\'All\', dropna=True, normalize=False)
 
# index : 行索引
# columns: 列值
# value : 聚合的值
# rownames、colnames: 行、列名
# aggfunc: 聚合函数
# normalize :  正则化
 
        - If passed \'all\' or `True`, will normalize over all values.
        - If passed \'index\' will normalize over each row.
        - If passed \'columns\' will normalize over each column.
        - If margins is `True`, will also normalize margin values.
 
 我要看某个国家在各个俱乐部的分布, 比如看阿根廷在各个俱乐部有几名球员
 
cross_tables_fifa = pd.crosstab(index=selected_data[u\'Nationality\'], columns=selected_data[u\'Club\'] )
cross_tables_fifa.query(\'Nationality==["Argentina"]\')
 
 
发表于 2019-08-08 17:28  HankCui  阅读(1974)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-12-12
  • 2021-11-29
  • 2021-12-12
  • 2021-07-21
  • 2021-04-30
猜你喜欢
  • 2021-09-21
  • 2021-12-12
  • 2021-11-18
  • 2021-05-25
  • 2021-11-12
  • 2021-05-21
相关资源
相似解决方案