pandas应用实例之pivot函数详解
什么是pivot函数
pivot
是pandas
中的函数之一,它用于重塑数据(reshape),即将一张表格数据在某些维度上做转换,使得行列间出现关系的处理方法。它主要是用来重塑多层次数据的,可以将长格式DataFrame
转换为宽格式。
pivot函数的语法
DataFrame.pivot(index=None, columns=None, values=None)
其中,index
代表重构后的行索引;columns
代表重构后的列索引;values
代表整理后的值的字段名。
pivot函数的应用场景
pivot
函数的常见应用场景有如下几类:
- 数据简单重构;
- 数据重塑后进行聚合;
- 数据透视;
- 数据转换为时间序列。
测试示例
示例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
参数指定了如果brand
和year
相同,则取这个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
函数常用来对数据进行简单重构、透视、数据分析等操作,并且往往跟其他一些函数(如groupby
、sum
等)一起使用,能够实现更丰富的操作。