在Python中如何使用Pandas创建数据透视表?

2021年9月19日23:12:54 发表评论 1,009 次浏览

在本指南中,我将向你展示如何使用pandas在 Python 中创建数据透视表。特别是,我将演示如何在 5 个简单场景中创建数据透视表。

使用 Pandas 在 Python 中创建数据透视表

如何使用Pandas创建数据透视表?首先,这是用于在 Python 中创建数据透视表的数据集:

在Python中如何使用Pandas创建数据透视表?

首先,你需要在 Python 中捕获上述数据。

但是你会怎么做呢?

Pandas创建数据透视表的方法 - 你可以使用pandas DataFrame完成此任务:

import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

print (df)

在 Python 中运行上面的代码,你会得到这个 DataFrame:

在Python中如何使用Pandas创建数据透视表?

准备好 DataFrame 后,你就可以对数据进行透视了。

假设你的目标是确定:

  1. 每位员工的总销售额
  2. 按国家/地区的总销售额
  3. 员工和国家/地区的销售额
  4. 按国家/地区的最大单笔销售额
  5. 按国家/地区划分的平均、中位数和最低销售额

接下来,你将看到如何根据这 5 个场景来透视数据。

使用 Pandas 的 Python 数据透视表的 5 个场景

场景 1:每位员工的总销售额

要获得每位员工的总销售额,你需要将以下语法添加到 Python 代码中:

pivot = df.pivot_table(index=['Name of Employee'], values=['Sales'], aggfunc='sum')

这将允许你总结 通过每名员工的销售(横跨四个季度)aggfunc =“sum”操作。

完整的 Python 代码如下所示:

import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

pivot = df.pivot_table(index=['Name of Employee'], values=['Sales'], aggfunc='sum')

print (pivot)

运行代码后,你将获得员工的总销售额:

在Python中如何使用Pandas创建数据透视表?

场景 2:按国家/地区划分的总销售额

如何使用Pandas创建数据透视表?现在,你将看到如何按县对总销售额进行分组。

Pandas创建数据透视表的方法:在这里,你需要按“国家/地区”字段聚合结果,而不是按照你在第一个场景中看到的“员工姓名”。

然后,你可以在 Python 中运行以下Pandas创建数据透视表示例代码:

import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

pivot = df.pivot_table(index=['Country'], values=['Sales'], aggfunc='sum')

print (pivot)

然后你将获得按县划分的总销售额:

在Python中如何使用Pandas创建数据透视表?

但是如果你想绘制这些结果呢?

为此,你需要将以下 3 个组件添加到代码中:

  • 在代码顶部导入 matplotlib.pyplot 作为 plt
  • 'pivot' 变量末尾的plot()
  • 代码底部的plt.show()

在运行下面的代码之前,请确保 matplotlib 包已安装在 Python 中。

import matplotlib.pyplot as plt
import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

pivot = df.pivot_table(index=['Country'], values=['Sales'], aggfunc='sum').plot()

plt.show()

当你运行代码时,你会得到这个图:

在Python中如何使用Pandas创建数据透视表?

场景 3:员工和国家/地区的销售额

你可以按多个字段聚合结果(与基于单个字段聚合结果的前两种情况不同)。

例如,你可以使用以下两个字段来获取以下两个方面的销售额:

  • 员工姓名;和
  • 国家
import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

pivot = df.pivot_table(index=['Name of Employee','Country'], values=['Sales'], aggfunc='sum')

print (pivot)

运行代码,你将看到员工和国家/地区的销售额:

在Python中如何使用Pandas创建数据透视表?

场景 4:按国家/地区的最大个人销售额

到目前为止,你使用 sum 操作(即 aggfunc='sum')对结果进行分组,但你不仅限于该操作。

如何使用Pandas创建数据透视表?在这种情况下,你将使用aggfunc='max'按县找到最大的个人销售额,Pandas创建数据透视表示例代码:

import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

pivot = df.pivot_table(index=['Country'], values=['Sales'], aggfunc='max')

print (pivot)

结果:

在Python中如何使用Pandas创建数据透视表?

场景 5:按国家/地区划分的平均、中值和最低销售额

你可以在aggfunc参数中使用多个操作 。例如,要按国家/地区查找平均值、中位数和最低销售额,你可以使用:

aggfunc={'median','mean','min'}

这是完整的 Python 代码:

import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

pivot = df.pivot_table(index=['Country'], values=['Sales'], aggfunc={'median','mean','min'})

print (pivot)

然后你会得到以下结果:

在Python中如何使用Pandas创建数据透视表?

想要绘制结果?

Pandas创建数据透视表的方法 - 没问题,只需应用以下Pandas创建数据透视表示例代码:

import matplotlib.pyplot as plt
import pandas as pd

employees = {'Name of Employee': ['Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill','Jon','Mark','Tina','Maria','Bill'],
             'Sales': [1000,300,400,500,800,1000,500,700,50,60,1000,900,750,200,300,1000,900,250,750,50],
             'Quarter': [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4],
             'Country': ['US','Japan','Brazil','UK','US','Brazil','Japan','Brazil','US','US','US','Japan','Brazil','UK','Brazil','Japan','Japan','Brazil','UK','US']
            }

df = pd.DataFrame(employees, columns= ['Name of Employee','Sales','Quarter','Country'])

pivot = df.pivot_table(index=['Country'], values=['Sales'], aggfunc={'median','mean','min'}).plot()

plt.show()

然后你会得到这个情节:

在Python中如何使用Pandas创建数据透视表?

结论 – 在 Python 中使用 Pandas 数据透视表

如何使用Pandas创建数据透视表?数据透视表传统上与MS Excel相关联。但是,你可以使用Pandas在 Python 中轻松创建数据透视表

你刚刚看到了如何在 5 个简单场景中创建数据透视表。但是这里回顾的概念可以应用于大量不同的场景。

你可以通过访问pandas 文档找到有关数据透视表的其他信息。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: