41

您所在的位置:网站首页 数据透视表再计算 41

41

2024-06-20 22:53| 来源: 网络整理| 查看: 265

41_Pandas使用数据透视表计算每个类别的统计信息

通过使用pandas.pivot_table()函数,可以实现与电子表格软件(例如Excel)的数据透视表功能相同的处理。

可以通过对分类数据的每个类别(分类数据,定性数据)进行分组(分组)来检查和分析定量数据统计信息(平均值,总计,最大值,最小值,标准差等)。 分别准备了一个名为pandas.crosstab()的函数,以汇总每个类别的出现次数和频率(也可以使用pivot_table())。

40_Pandas中crosstab进行交叉制表(计算每个类别的出现次数和频率)

这里,将对以为内容予以描述。

pandas.pivot_table()函数的基本用法计算每个类别的小计/总计:参数边距指定如何计算结果值:参数aggfunc指定是否排除原始数据的缺失值NaN:参数dropna

我们将以泰坦尼克号的生存信息数据为例。

import numpy as np import pandas as pd df = pd.read_csv('./data/41/train.csv', index_col=0).drop(['Name', 'Ticket', 'SibSp', 'Parch'], axis=1) print(df.head()) # Survived Pclass Sex Age Fare Cabin Embarked # PassengerId # 1 0 3 male 22.0 7.2500 NaN S # 2 1 1 female 38.0 71.2833 C85 C # 3 1 3 female 26.0 7.9250 NaN S # 4 1 1 female 35.0 53.1000 C123 S # 5 0 3 male 35.0 8.0500 NaN S pandas.pivot_table()函数的基本用法

pandas.pivot_table()函数需要以下三个参数。

data(第一个参数):指定原始数据的pandas.DataFrame对象。index:指定原始数据的列名。它成为结果行标题。columns:指定原始数据的列名称。它成为结果列标题。 计算未在参数索引和列中指定的列的平均值作为结果。此时,将排除其数据类型不是数字的列。稍后将描述计算平均值以外的值的方法。 print(pd.pivot_table(df, index='Pclass', columns='Sex')) # Age Fare Survived # Sex female male female male female male # Pclass # 1 34.611765 41.281386 106.125798 67.226127 0.968085 0.368852 # 2 28.722973 30.740707 21.970121 19.741782 0.921053 0.157407 # 3 21.750000 26.507589 16.118810 12.661633 0.500000 0.135447

pandas.pivot_table()函数返回pandas.DataFrame。

print(type(pd.pivot_table(df, index='Pclass', columns='Sex'))) #

此外,如果在参数值中指定了原始数据的列名,则仅计算该列的结果。

print(pd.pivot_table(df, index='Pclass', columns='Sex', values='Age')) # Sex female male # Pclass # 1 34.611765 41.281386 # 2 28.722973 30.740707 # 3 21.750000 26.507589

也可以在参数索引,列,值中指定原始数据的列名列表。结果以多索引(分层索引)pandas.DataFrame的形式返回。

print(pd.pivot_table(df, index=['Sex', 'Pclass'], columns='Survived', values=['Age', 'Fare'])) # Age Fare # Survived 0 1 0 1 # Sex Pclass # female 1 25.666667 34.939024 110.604167 105.978159 # 2 36.000000 28.080882 18.250000 22.288989 # 3 23.818182 19.329787 19.773093 12.464526 # male 1 44.581967 36.248000 62.894910 74.637320 # 2 33.369048 16.022000 19.488965 21.095100 # 3 27.255814 22.274211 12.204469 15.579696 计算每个类别的小计/总计:参数margins

如果参数margin为True,则可以计算每个类别的结果(小计)和整体结果(总计)。

print(pd.pivot_table(df, index='Sex', columns='Pclass', values='Age', margins=True)) # Pclass 1 2 3 All # Sex # female 34.611765 28.722973 21.750000 27.915709 # male 41.281386 30.740707 26.507589 30.726645 # All 38.233441 29.877630 25.140620 29.699118

可以通过参数margins_name指定小计/总行标签/列标签。默认为“all”。

print(pd.pivot_table(df, index='Sex', columns='Pclass', values='Age', margins=True, margins_name='Total')) # Pclass 1 2 3 Total # Sex # female 34.611765 28.722973 21.750000 27.915709 # male 41.281386 30.740707 26.507589 30.726645 # Total 38.233441 29.877630 25.140620 29.699118 指定如何计算结果值:参数aggfunc

默认情况下,将计算平均值,但是如果您为参数aggfunc指定函数,则可以通过其他方法计算该值。 默认情况下(省略参数aggfunc时),指定numpy.mean()。

print(pd.pivot_table(df, index='Sex', columns='Pclass', values='Age', margins=True, aggfunc=np.min)) # Pclass 1 2 3 All # Sex # female 2.00 2.00 0.75 0.75 # male 0.92 0.67 0.42 0.42 # All 0.92 0.67 0.42 0.42

还可以在参数aggfunc中指定函数列表。

print(pd.pivot_table(df, index='Sex', columns='Pclass', values='Age', margins=True, aggfunc=[np.min, np.max])) # amin amax # Pclass 1 2 3 All 1 2 3 All # Sex # female 2.00 2.00 0.75 0.75 63.0 57.0 63.0 63.0 # male 0.92 0.67 0.42 0.42 80.0 70.0 74.0 80.0 # All 0.92 0.67 0.42 0.42 80.0 70.0 74.0 80.0

指定的函数可以是返回一维数组的标量值的函数。不限于NumPy函数,例如,Python的内置函数len()返回一维数组中的元素数是可以的。

print(pd.pivot_table(df, index='Sex', columns='Pclass', values='Age', margins=True, aggfunc=len)) # Pclass 1 2 3 All # Sex # female 94.0 76.0 144.0 261.0 # male 122.0 108.0 347.0 453.0 # All 186.0 173.0 355.0 714.0

可以使用len()计算每个类别的出现次数,但是如上所述,还单独准备了一个称为crosstab()的函数。使用crosstab(),可以将结果标准化(标准化)为1。

40_Pandas中crosstab进行交叉制表(计算每个类别的出现次数和频率) 指定是否排除原始数据的缺失值NaN:参数dropna

上面使用len()的示例的总值小于原始数据的数量。这是由于处理了缺失值NaN。

print(len(df)) # 891 print(df.isnull().sum()) # Survived 0 # Pclass 0 # Sex 0 # Age 177 # Fare 0 # Cabin 687 # Embarked 2 # dtype: int64

有关如何计算丢失的NaN的数量,请参阅以下文章。

35_Pandas计算满足特定条件的元素的数量

如果参数dropna为False,则计算所有元素。

print(pd.pivot_table(df, index='Sex', columns='Pclass', values='Age', margins=True, aggfunc=len, dropna=False)) # Pclass 1 2 3 All # Sex # female 94.0 76.0 144.0 314.0 # male 122.0 108.0 347.0 577.0 # All 216.0 184.0 491.0 891.0

如果将NaN处理留给pivot_table(),则可能会得到意外的结果,因此可能更安全一些,例如排除NaN或在原始数据时将其替换为另一个值。

05_Pandas删除,替换并提取其中的缺失值NaN


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3