pandas应用实例之pivot函数详解

  • Post category:Python

pandas应用实例之pivot函数详解

什么是pivot函数

pivotpandas中的函数之一,它用于重塑数据(reshape),即将一张表格数据在某些维度上做转换,使得行列间出现关系的处理方法。它主要是用来重塑多层次数据的,可以将长格式DataFrame转换为宽格式。

pivot函数的语法

DataFrame.pivot(index=None, columns=None, values=None)

其中,index代表重构后的行索引;columns代表重构后的列索引;values代表整理后的值的字段名。

pivot函数的应用场景

pivot函数的常见应用场景有如下几类:

  1. 数据简单重构;
  2. 数据重塑后进行聚合;
  3. 数据透视;
  4. 数据转换为时间序列。

测试示例

示例1

首先,我们来看一个简单的示例:将原表格中商品销售数据按品牌进行统计。

首先导入pandas库:

import pandas as pd

然后,首先来看一下原始数据:

data = pd.DataFrame({
    'brand': ['A', 'B', 'C', 'A', 'B', 'C', 'A', 'C'],
    'year': [2018, 2018, 2018, 2019, 2019, 2019, 2020, 2020],
    'sales_volume': [100, 200, 300, 150, 250, 350, 120, 190]
})

这里,我们创建了一个DataFrame数据结构,表格中包含品牌、年份以及销售量三列。

接下来,我们使用pivot函数对原始数据进行重构,将品牌作为新表格的行索引,将年份作为新表格的列索引,统计表格中的销售量数据:

pivoted_data = data.pivot(index='brand', columns='year', values='sales_volume')

这里,我们通过index参数指定了新表格的行索引为品牌信息,通过columns参数指定了新表格的列索引为年份信息,通过values参数指定了如果brandyear相同,则取这个sales_volume字段相应的数据。

接着,我们将结果打印出来:

print(pivoted_data)

输出结果为:

year    2018  2019  2020
brand                  
A        100   150   120
B        200   250   NaN
C        300   350   190

这里,我们可以发现最终得到了一个表格,它的行列索引关系是品牌和年份之间的映射,同时它的每一项记录了在某一个品牌的某一个年份的销售量是多少。

示例2

接下来,我们再来看一下重构后进行聚合的场景。我们可以继续使用上一步中的数据对象。

假设我们现在需要对原表格中商品销售数据按品牌和年份进行统计,并计算每个品牌、每个年份的销售额和订单量。

我们可以先将原始表格重构为以下形式:

pivoted_data = data.pivot(index='brand', columns='year', values='sales_volume')

pivoted_data['sales_value_2018'] = pivoted_data[2018] * 10
pivoted_data['sales_value_2019'] = pivoted_data[2019] * 10
pivoted_data['sales_value_2020'] = pivoted_data[2020] * 10

pivoted_data['order_count_2018'] = pivoted_data[2018] // 10
pivoted_data['order_count_2019'] = pivoted_data[2019] // 10
pivoted_data['order_count_2020'] = pivoted_data[2020] // 10

pivoted_data.drop(columns=[2018, 2019, 2020], inplace=True)

这里,我们首先使用pivot函数将原始表格进行重构,得到了品牌和年份之间的映射关系。接着,我们计算了不同品牌在各个年份的销售额,并将这些信息分别存储在了销售额的对应列中;同时,我们计算了不同品牌在各个年份的订单数量,并将这些信息存储在了订单数量对应的列中。最后,我们通过drop函数删除了原表格中用于生成新列的原始数据。

然后,我们使用groupby函数对结果进行聚合,得到按品牌对应年份的统计结果:

grouped_data = pivoted_data.groupby(['brand']).sum()
print(grouped_data)

输出结果为:

year   sales_value_2018  sales_value_2019  sales_value_2020  \
brand                                                         
A                   100.0             150.0             120.0   
B                   200.0             250.0               0.0   
C                   300.0             350.0             190.0   

year   order_count_2018  order_count_2019  order_count_2020  
brand                                                        
A                   10.0              15.0              12.0  
B                   20.0              25.0               0.0  
C                   30.0              35.0              19.0   

这里,我们可以发现,最终得到了按品牌进行汇总的结果,其中每行对应不同的品牌,在该品牌下又对各个年份进行了汇总,记录了每个品牌、每个年份的销售额和订单量信息。

通过以上两个示例,我们可以看到,在实际的数据处理中,pivot函数常用来对数据进行简单重构、透视、数据分析等操作,并且往往跟其他一些函数(如groupbysum等)一起使用,能够实现更丰富的操作。