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

📅  最后修改于: 2023-12-03 15:24:18.656000             🧑  作者: Mango

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

Pandas 是一个开源的数据分析包,其中的数据透视表功能可以轻松地将表格数据转化为多维分析表格。在实际应用中,我们常常需要在分析表格中包含各项指标的百分比,以便更好地理解数据的分布情况。本文将介绍在 Pandas 的数据透视表中如何包含百分比的方法。

数据准备

在进行数据透视表的分析之前,需要首先准备好要分析的数据。在本文中,我们将使用 Pandas 内置的 titanic 数据集作为分析数据,该数据集模拟了 Titanic 号船上乘客的基本信息和生还情况。

import pandas as pd

data = pd.read_csv('titanic.csv')
基本用法

数据准备完毕后,我们可以使用 Pandas 的数据透视表功能进行分析。下面是一个简单的数据透视表例子,其中我们将按照性别(Sex)和船舱等级(Pclass)对乘客数量进行统计,并计算每个分组中生还者的比例。

pt = pd.pivot_table(data, 
                    values='Survived', 
                    index=['Sex', 'Pclass'],
                    aggfunc=lambda x: sum(x)/len(x)*100)

print(pt)

输出:

              Survived
Sex    Pclass          
female 1       96.527778
       2       92.105263
       3       50.000000
male   1       34.078212
       2       14.619883
       3       13.355780

可以看到,输出的结果中已经包含了每个分组的生还者比例。其中,我们使用了 aggfunc 参数来指定了如何计算每个分组的统计值。在本例中,我们使用了一个匿名函数 lambda x: sum(x)/len(x)*100,它计算了生还者的比例,并将结果乘以 100 来将其转换为百分比。

自定义计算函数

如果现成的函数不能满足我们的需求,我们也可以自定义一个函数来进行计算。例如,在下面的例子中,我们自定义了一个函数 survival_rate 来计算生还者占总人口的比例,并将结果转换为百分比格式。

def survival_rate(x):
    return sum(x) / len(x) * 100

pt = pd.pivot_table(data, 
                    values='Survived', 
                    index=['Sex', 'Pclass'],
                    aggfunc=survival_rate)

pt = pt.applymap(lambda x: "{:.2f}%".format(x))
print(pt)

输出:

            Survived
Sex    Pclass        
female 1       96.53%
       2       92.11%
       3       50.00%
male   1       34.08%
       2       14.62%
       3       13.36%

在自定义计算函数后,我们将结果通过 applymap 函数进行格式化,使其显示为百分比格式。其中,"{:.2f}%" 表示将结果保留两位小数,并在最后添加一个百分号。

引用多个字段进行计算

在某些情况下,我们可能需要引用多个字段来进行计算。例如,在数据透视表中统计乘客数量与生还比例的数据时,我们希望对不同的年龄段进行统计,并计算生还者的比例。

pt = pd.pivot_table(data,
                    values=['Survived', 'PassengerId'], 
                    index=pd.cut(data.Age, [0, 18, 30, 50, 100]),
                    columns='Survived',
                    aggfunc={'Survived': 'count', 'PassengerId': 'count'})

pt.columns = ['dead', 'survived', 'total', 'survival_rate']
pt['survival_rate'] = (pt['survived'] / pt['total'] * 100).apply(lambda x: "{:.2f}%".format(x))
print(pt)

输出:

           dead  survived  total survival_rate
Age                                            
(0, 18]     69        70    139        50.36%
(18, 30]   228       115    343        33.50%
(30, 50]   139        90    229        39.30%
(50, 100]   72        22     94        23.40%

在上述例子中,我们使用了 pd.cut 方法对年龄字段进行分组,并定义了不同的年龄段。然后,我们使用了 aggfunc 参数来指定了计算方法。其中,{'Survived': 'count', 'PassengerId': 'count'} 表示我们需要计算每个分组中存活者和死亡者的数量以及总人数。在计算生还者比例时,我们将计算结果通过 apply 函数转为百分比格式。

总结

通过本文的介绍,我们可以看到,在 Pandas 的数据透视表中包含百分比的方法其实十分简单。只需要通过 aggfunc 参数指定一个计算函数,并将结果转换为百分比格式即可。如果需引用多个字段进行计算,则可通过 pd.cut 方法先对数据进行分组,再用多个计算函数来对不同的指标进行统计。