关键词

pandas应用实例之pivot函数详解

pandas应用实例之pivot函数详解

在日常数据分析中,我们常常需要对数据进行重塑,以便于进行更加深入的数据分析和可视化呈现。在这种情况下,pandas中的pivot函数是非常有用的。本文将详细解释什么是pivot函数,以及它如何应用于数据重塑。

什么是pivot函数?

pivot函数可以旋转(裁剪和旋转)一个DataFrame对象的形状,使行变为列,列变为行,并重新排列数据大小。它可以将长格式(long format)与宽格式(wide format)之间进行转换。

pivot函数语法

下面是pivot函数的基本语法:

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

其中,参数:

  • index:新DataFrame中的行索引。默认的值是原始DataFrame的行标签(这个参数是可选的)。
  • columns:新DataFrame中的列标签。默认的值是原始DataFrame的列标签(这个参数是可选的)。
  • values:在新DataFrame中的存储数据。默认的值为原始DataFrame中的所有其他列(这个参数是可选的)。

pivot函数的使用示例

现在,我们来看几个使用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

展开阅读全文