Python+Pandas实现数据透视表

  • Post category:Python

Python和Pandas是数据分析领域中使用广泛的工具。数据透视表是一种方便快捷地对数据进行分析和处理的方法。在Python中,我们可以使用Pandas库来实现数据透视表。

下面是Python+Pandas实现数据透视表的完整攻略,包含以下步骤:

  1. 导入Pandas库
import pandas as pd
  1. 创建DataFrame对象

我们先创建一些模拟数据,使用Pandas的DataFrame对象进行存储和管理。下面我们创建一个名为“sales”的数据表,并向其中添加一些数据:

data = {'Region': ['East', 'West', 'South', 'North', 'East', 'West', 'South', 'North'], 
        'Month': ['Jan', 'Feb', 'Mar', 'Jan', 'Feb', 'Mar', 'Jan', 'Feb'], 
        'Sales': [100, 110, 90, 120, 130, 140, 110, 120]}

df = pd.DataFrame(data)

通过以上代码,我们创建了一个数据表,包含三列:Region、Month和Sales。其中Region表示区域,Month表示月份,Sales表示销售额。

  1. 使用pivot_table方法生成数据透视表

我们使用pivot_table方法生成数据透视表。其中,第一个参数是需要进行汇总的数据表,index参数指定数据透视表中的行,columns参数指定数据透视表中的列,values参数指定汇总的值,aggfunc参数指定需要进行的汇总计算方法。

pivot_df = pd.pivot_table(df, index=['Region'], columns=['Month'], values=['Sales'], aggfunc=sum)
print(pivot_df)

以上代码中,我们使用Region作为数据透视表的行,使用Month作为数据透视表的列,使用Sales作为数据透视表的汇总值,使用sum方法进行汇总计算。

输出结果如下:

       Sales        
Month    Feb  Jan  Mar
Region               
East     130  100  140
North    120  120  NaN
South    120  110   90
West     140  NaN  110

根据数据透视表的输出结果,可以发现,我们将数据按照区域和月份进行了汇总,统计了每个区域每个月份的销售额。缺失值NaN表示该区域在该月份没有销售数据。

  1. 使用margins参数添加总计行和列

我们可以使用margins参数在数据透视表中添加总计行和列,方法是在调用pivot_table方法时,将margins参数设置为True。

pivot_df = pd.pivot_table(df, index=['Region'], columns=['Month'], values=['Sales'], aggfunc=sum, margins=True)
print(pivot_df)

以上代码中,我们将margins参数设置为True,生成带有总计行和列的数据透视表。输出结果如下:

              Sales                     
Month           Feb    Jan    Mar   All
Region                                  
East          130.0  100.0  140.0   370
North         120.0  120.0    NaN   240
South         120.0  110.0   90.0   320
West          140.0    NaN  110.0   250
All           510.0  330.0  340.0  1180

可以看到,我们生成了一个包含总计行和列的数据透视表,方便我们对销售数据进行更详细的分析。

示例1:根据数据的级别进行分析

现在,我们将采用“按照不同级别显示”的方式来展示数据透视表的使用。我们将数据按照产品类别进行分类,并在数据透视表中展示这些类别。

data = {'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Clothing', 'Electronics'], 
        'Vendor': ['A', 'A', 'B', 'A', 'B', 'B'], 
        'Sales': [100, 110, 90, 120, 130, 140]}

df = pd.DataFrame(data)

pivot_df = pd.pivot_table(df, index=['Category'], columns=['Vendor'], values=['Sales'], aggfunc=sum, margins=True)

print(pivot_df)

输出结果如下:

             Sales             
Vendor          A    B  All
Category                   
Clothing      230  270  500
Electronics   190  280  470
All           420  550  970

可以看到,我们根据“Category”列中的分类对数据进行了透视,并在透视表中展示了这些分类。同时,我们还展示了每个商品类别的销售数据,包括总额。

示例2:使用多个值进行汇总

我们可以使用多个值对数据进行透视。例如,在以上的示例中,我们还可以对销售数据按月份进行分析:

pivot_df = pd.pivot_table(df, index=['Category'], columns=['Vendor'], values=['Sales'], aggfunc=sum, margins=True)

df2 = pd.pivot_table(df, index=['Category'], columns=['Vendor'], values=['Sales'], aggfunc=max, margins=True)

pivot_df['Max Sales'] = df2['Sales']

print(pivot_df);

输出结果如下:

             Sales             Max Sales
Vendor          A    B  All    A    B  All
Category                                 
Clothing      230  270  500  120  130  270
Electronics   190  280  470  110  140  280
All           420  550  970  120  140  280

可以看到,我们在数据透视表中统计了每个商品类别和每个供应商的销售数据,并在透视表中展示了这些数据。除此之外,我们还使用了max函数,统计了每个商品类别和每个供应商的单笔销售最高金额,并在透视表中展示了这些最高金额,帮助我们更好地了解数据。