在日常数据分析中,我们常常需要对数据进行重塑,以便于进行更加深入的数据分析和可视化呈现。在这种情况下,pandas
中的pivot
函数是非常有用的。本文将详细解释什么是pivot
函数,以及它如何应用于数据重塑。
pivot
函数可以旋转(裁剪和旋转)一个DataFrame对象的形状,使行变为列,列变为行,并重新排列数据大小。它可以将长格式(long format)与宽格式(wide format)之间进行转换。
下面是pivot
函数的基本语法:
DataFrame.pivot(self, index=None, columns=None, values=None)
其中,参数:
index
:新DataFrame中的行索引。默认的值是原始DataFrame的行标签(这个参数是可选的)。columns
:新DataFrame中的列标签。默认的值是原始DataFrame的列标签(这个参数是可选的)。values
:在新DataFrame中的存储数据。默认的值为原始DataFrame中的所有其他列(这个参数是可选的)。现在,我们来看几个使用pivot
函数的示例,以便更好地理解它的工作原理和用法。
首先,我们创建一个包含书籍销售数据的数据集。这个数据集有四个字段:'Year', 'Month', 'Book Category'和'Sales'.
import pandas as pd
import numpy as np
# 创建数据集
data = [['2018', 'Jan', 'Fiction', 300],
['2018', 'Jan', 'Non-Fiction', 450],
['2018', 'Feb', 'Fiction', 200],
['2018', 'Feb', 'Non-Fiction', 500],
['2019', 'Jan', 'Fiction', 600],
['2019', 'Jan', 'Non-Fiction', 650],
['2019', 'Feb', 'Fiction', 400],
['2019', 'Feb', 'Non-Fiction', 700]]
df = pd.DataFrame(data, columns=['Year', 'Month', 'Book Category', 'Sales'])
现在,我们使用pivot
函数来重塑数据以显示每个月的销售总额与每个类型的书籍:
# 使用pivot函数将数据从长格式(long format)转换为宽格式(wide format)
sales_by_category = df.pivot(index='Month', columns='Book Category', values='Sales')
print(sales_by_category)
输出结果:
Book Category Fiction Non-Fiction
Month
Feb 400 700
Jan 600 650
在上面的示例中,我们首先使用pivot
函数从长格式转换为宽格式,并将'Year'字段从数据集中删除。这使得我们能够更轻松地计算每个月的总销售额。
现在,我们来看一个更复杂的示例,这个数据集包含了不同地区的销售数据。
# 创建数据集
data = [['North', '2018', 'Jan', 'Fiction', 300],
['North', '2018', 'Jan', 'Non-Fiction', 450],
['North', '2018', 'Feb', 'Fiction', 200],
['North', '2018', 'Feb', 'Non-Fiction', 500],
['South', '2019', 'Jan', 'Fiction', 600],
['South', '2019', 'Jan', 'Non-Fiction', 650],
['South', '2019', 'Feb', 'Fiction', 400],
['South', '2019', 'Feb', 'Non-Fiction', 700],
['East', '2018', 'Jan', 'Fiction', 450],
['East', '2018', 'Jan', 'Non-Fiction', 500],
['East', '2018', 'Feb', 'Fiction', 300],
['East', '2018', 'Feb', 'Non-Fiction', 450],
['West', '2019', 'Jan', 'Fiction', 700],
['West', '2019', 'Jan', 'Non-Fiction', 750],
['West', '2019', 'Feb', 'Fiction', 500],
['West', '2019', 'Feb', 'Non-Fiction', 800]]
df = pd.DataFrame(data, columns=['Region', 'Year', 'Month', 'Book Category', 'Sales'])
在这个示例中,我们需要从长格式数据中提取所有地区的销售数据,并将其组织成一个新的数据集。
首先,我们使用pivot
函数来重塑数据集以获取所有地区的销售数据。
# 使用pivot函数将数据由长格式(long format)转换为宽格式(wide format)
region_monthly = df.pivot(index=['Year', 'Month'], columns='Region', values='Sales')
print(region_monthly)
输出结果:
Region East North South West
Year Month
2018 Feb 300 200 NaN NaN
Jan 500 750 NaN NaN
2019 Feb NaN NaN 400 500
Jan NaN NaN 600 700
现在,我们需要将重新组织数据,这时候我们可以使用stack
函数,它可以将数据由宽格式转换为长格式。
# 使用stack函数将数据从宽格式转换为长格式
region_monthly_stacked = region_monthly.stack().reset_index(name='Sales')
print(region_monthly_stacked)
输出结果:
Year Month Region Sales
0 2018 Feb East 300
1 2018 Feb North 200
2 2018 Jan East 500
3 2018 Jan North 750
4 2019 Feb South 400
5 2019 Feb West 500
6 2019 Jan South 600
7 2019 Jan West 700
在上面的示例中,我们首先使用pivot
函数从长格式转换为宽格式,并将数据按地区分组。然后,我们使用stack
函数将数据从宽格式转换为长格式,并按年、月和地区排列数据。
这些示例说明了pivot
函数的两种常见用法,用于创建各种数据类型之间的透视表和跨多个数据维度来组织和重塑数据。
本文链接:http://task.lmcjl.com/news/17354.html