如何在Pandas的数据透视表中包含百分比

  • Post category:Python

使用 Pandas 的数据透视表功能可以很方便地对数据进行汇总和分析。在数据透视表中包含百分比可以更好地展示和比较不同类别之间的数据分布情况。

下面详细讲解如何在 Pandas 的数据透视表中包含百分比:

  1. 生成数据透视表

首先需要生成一个基础的数据透视表。可以使用 Pandas 的 pivot_table() 函数来生成数据透视表,例如:

import pandas as pd

df = pd.read_csv('data.csv')   # 假设读入的数据文件名为 data.csv
pt = pd.pivot_table(df, values='sales', index='category', columns='month', aggfunc='sum')

以上代码将读入的数据 df 通过 pivot_table() 函数生成了一个数据透视表 pt。这个数据透视表以 category 列为行索引,month 列为列索引,sales 列为值,并使用 sum 函数对值进行了统计。

  1. 添加总计列和总计行

为了计算每个类别的百分比,我们需要在数据透视表中添加总计列和总计行。可以使用 Pandas 的 concat() 函数来进行拼接,例如:

pt['Total'] = pt.sum(numeric_only=True, axis=1)
pt.loc['Total'] = pt.sum(numeric_only=True, axis=0)

以上代码添加了一列名为 Total 的总计列,以及一行索引为 'Total' 的总计行。其中,sum() 函数对每行或每列上的数值进行求和,numeric_only=True 参数表示只对数值类型的列进行求和,axis=1 表示对行进行求和,axis=0 表示对列进行求和。

  1. 计算百分比

根据总计列和总计行的计算结果,我们可以计算每个类别在不同月份或总销售额中所占的百分比。可以使用 Pandas 的 apply() 函数来进行计算,例如:

def percent(col):
    return col / col.sum()

pt_percent = pt.apply(percent, axis=1) * 100

以上代码定义了一个 percent 函数来计算每行数据所占的百分比,然后使用 apply() 函数将函数应用于每行数据。最后乘以 100 转换为百分比形式。

  1. 格式化输出

最后,我们可以将计算结果输出为一张美观易读的表格。可以使用 Pandas 的字符串格式化函数 format() 来进行格式化输出,例如:

pt_format = pt.applymap('{:.2f}'.format)
pt_percent_format = pt_percent.applymap('{:.2f}%'.format)
pt_with_percent = pd.concat([pt_format, pt_percent_format], axis=1, keys=['Total Sales', 'Percent'])

以上代码使用 applymap() 函数将数据透视表中的每个数值格式化为两位小数的浮点数或百分比形式,并使用 concat() 函数将数据透视表、百分比表格以及标题一起拼接为一个新的数据透视表 pt_with_percent。其中,keys 参数指定了每个表格的标题。

通过以上步骤,我们就可以在 Pandas 的数据透视表中包含百分比了。