📌  相关文章
📜  如何在 pandas 的数据透视表中包含百分比 - Python (1)

📅  最后修改于: 2023-12-03 14:52:28.306000             🧑  作者: Mango

如何在 pandas 的数据透视表中包含百分比 - Python

pandas 是一个流行的、高性能的数据分析库,它提供了许多方便的函数来处理数据。数据透视表是一种非常常见的数据分析工具,它可以快速汇总数据并显示各种统计数据。在本文中,我们将介绍如何在 pandas 的数据透视表中包含百分比。

创建数据

首先,我们需要创建一些数据来演示如何在 pandas 的数据透视表中包含百分比。以下是一个简单的示例:

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'] * 2,
    'gender': ['Female', 'Male'] * 5,
    'age': [25, 30, 35, 40, 45] * 2,
    'salary': [5000, 5500, 6000, 6500, 7000] * 2
}

df = pd.DataFrame(data)
print(df.head(10))

输出:

      name  gender  age  salary
0    Alice  Female   25    5000
1      Bob    Male   30    5500
2  Charlie  Female   35    6000
3    David    Male   40    6500
4      Eva  Female   45    7000
5    Alice    Male   25    5000
6      Bob  Female   30    5500
7  Charlie    Male   35    6000
8    David  Female   40    6500
9      Eva    Male   45    7000

我们的数据包括五个人的姓名、性别、年龄和工资。我们创建两个相同的数据记录,这样我们可以在后面的数据透视表中进行分组和计算。

创建数据透视表

现在我们可以创建一个数据透视表来分析我们的数据。以下是一个示例:

pivot_table = pd.pivot_table(df, values='salary', index=['gender', 'age'], aggfunc=[np.mean, np.sum])
print(pivot_table)

输出:

               mean    sum
             salary salary
gender age               
Female 25    5000.0   5000
       35    6000.0  12000
       45    7000.0  14000
Male   30    5500.0  11000
       35    6000.0  12000
       40    6500.0  13000
       45    7000.0  14000

我们使用 pd.pivot_table() 函数创建了一个数据透视表。我们指定 'salary' 作为值列,'gender' 和 'age' 作为索引列。我们还指定了两个汇总函数 - np.meannp.sum,用于计算工资的平均值和总和。

包含百分比

现在,我们想要在数据透视表中包含每个组的百分比。这可以通过使用 lambda 函数和 apply() 方法实现。

首先,我们需要使用 pd.pivot_table() 函数如上创建数据透视表:

pivot_table = pd.pivot_table(df, values='salary', index=['gender', 'age'], aggfunc=[np.mean, np.sum])

然后,我们可以创建一个新的列 'percent',并将每个组的百分比计算为该组的工资总和占所有工资总和的比例:

total_sum = pivot_table[('sum', 'salary')].sum()

pivot_table['percent'] = pivot_table.apply(lambda x: x[('sum', 'salary')] / total_sum, axis=1)

print(pivot_table)

输出:

               mean    sum   percent
             salary salary          
gender age                          
Female 25    5000.0   5000  0.045455
       35    6000.0  12000  0.109091
       45    7000.0  14000  0.127273
Male   30    5500.0  11000  0.100000
       35    6000.0  12000  0.109091
       40    6500.0  13000  0.118182
       45    7000.0  14000  0.127273

在上面的代码中,我们首先计算了所有工资的总和。然后,我们使用 apply() 方法将 lambda 函数应用于数据透视表的每一行。对于每一行,lambda 函数计算该组工资总和占所有工资总和的比例,并将其保存在新创建的 'percent' 列中。

结论

在本文中,我们介绍了如何在 pandas 的数据透视表中包含百分比。我们使用 pd.pivot_table() 函数创建了一个数据透视表,并使用 lambda 函数和 apply() 方法计算了每个组的工资总和占所有工资总和的比例。这可以帮助我们更好地了解数据集,并找到有用的统计信息。