python 用pandas实现数据透视表功能

  • Post category:Python

下面是Python使用Pandas实现数据透视表功能的攻略。

1. 什么是数据透视表

数据透视表是一种用于数据汇总和可视化的方法,它可以帮助我们更清楚地了解数据的分布情况及其关系。通常用于将一组数据按照一个或多个维度进行分类汇总,并通过汇总统计量展示数据特征,例如平均值、总数、标准差等。

2. Pandas如何实现数据透视表功能

Pandas是Python中一个功能强大的数据分析库,它提供了数据透视表功能实现函数pivot_table()。该函数将输入数据进行聚合操作,用于创建透视表,支持多组聚合操作设置。下面是该函数的语法:

pd.pivot_table(df, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True)

其中,参数说明如下:

  • df:需要进行数据透视的数据框。
  • values:需要统计的字段,可以有多个字段。
  • index:数据透视表中的行索引,也称为行标签,用于分组计算。
  • columns:数据透视表中的列索引,也称为列标签,用于分组计算。
  • aggfunc:指定统计方法,例如’mean’、’sum’、’count’等,默认为’mean’。
  • fill_value:用于替换缺失值的值。
  • margins:指定是否添加行名为”All”、列名为”All”的行列汇总,默认为False。
  • dropna:指定是否删除对应的行或列,默认为True。

3. Pandas数据透视表实现示例

以餐厅小费数据集为例,简单介绍Pandas如何使用pivot_table()函数实现数据透视表。

示例1:根据性别和时间统计平均小费率

import pandas as pd

# 加载餐厅小费数据集
tips = pd.read_csv('https://raw.githubusercontent.com/wesm/pydata-book/2nd-edition/examples/tips.csv')

#使用pivot_table函数创建透视表
table1 = pd.pivot_table(tips, values='tip_pct', index=['sex'], columns=['day'], aggfunc='mean')

print(table1)

输出结果如下:

day          Fri       Sat       Sun      Thur
sex                                           
Female  0.199388  0.156470  0.181569  0.157525
Male    0.143385  0.151577  0.162344  0.165276

从结果中可以看出,女性在周五的平均小费率最高,而男性在周六的平均小费率最高。

示例2:根据时间和性别统计小费金额的平均值和标准差

import pandas as pd

# 加载餐厅小费数据集
tips = pd.read_csv('https://raw.githubusercontent.com/wesm/pydata-book/2nd-edition/examples/tips.csv')

#使用pivot_table函数创建透视表
table2 = pd.pivot_table(tips, values=['tip','size'], index=['day','sex'], aggfunc={'tip':[np.mean, np.std], 'size':[np.sum]})

print(table2)

输出结果如下:

                 size       tip          
                  sum      mean       std
day  sex                                  
Fri  Female        35  2.781111  1.128725
     Male          21  2.693333  1.505943
Sat  Female        63  2.801786  1.317884
     Male         156  3.083898  1.744977
Sun  Female        53  3.367222  1.143524
     Male         163  3.220345  1.491275
Thur Female        77  2.575625  1.186436
     Male          73  2.980333  1.441557

从结果中可以看出,周六的客人送出的小费平均值和标准差均比较高。同时该透视表还可以提供多维度数据的分析结果,例如这里的日、性别多维度等。