【100天精通Python】Day60:Python 数据分析_Pandas高级功能-数据透视表pivot_table()和数据交叉表crosstab()常用功能和操作

简介: 【100天精通Python】Day60:Python 数据分析_Pandas高级功能-数据透视表pivot_table()和数据交叉表crosstab()常用功能和操作

1 数据透视表和交叉表pivot_table(),crosstab()

  • 数据透视表:使用 pivot_table() 方法,你可以根据一个或多个列的值对数据进行汇总和分析。你可以指定哪些列作为索引,哪些列作为值,以及如何进行聚合计算。
  • 交叉表:使用 pd.crosstab() 函数,你可以计算两个或多个因素之间的交叉频率,特别适用于分类数据的汇总分析。

数据透视表和交叉表示例:

import pandas as pd
# 创建一个示例DataFrame
data = {'Category': ['A', 'B', 'A', 'B', 'A'],
        'Value1': [10, 15, 20, 25, 30],
        'Value2': [100, 150, 200, 250, 300]}
df = pd.DataFrame(data)
# 创建数据透视表
pivot_table = pd.pivot_table(df, values=['Value1', 'Value2'], index='Category', aggfunc='sum')
# 创建交叉表
cross_table = pd.crosstab(df['Category'], df['Value1'])
print("数据透视表:")
print(pivot_table)
print("\n交叉表:")
print(cross_table)

2  Pandas数据透视表常用操作

       Pandas 的数据透视表(Pivot Table)提供了丰富的高级选项,允许你自定义数据的汇总方式、聚合函数、行和列的顺序等。以下是一些常见的高级选项示例:

2.1 自定义聚合函数

      默认情况下,pivot_table() 使用平均值作为聚合函数。但你可以使用 aggfunc 参数来指定自定义的聚合函数,例如 sumcountmaxmin 等,甚至可以传递自己编写的函数。

import pandas as pd
# 创建一个示例DataFrame
data = {'Category': ['A', 'A', 'B', 'B', 'A', 'A'],
        'Value': [10, 20, 15, 25, 5, 10]}
df = pd.DataFrame(data)
# 创建数据透视表,使用自定义聚合函数计算总和
pivot_table = pd.pivot_table(df, values='Value', index='Category', aggfunc='sum')
print(pivot_table)

输出:

2.2 指定多个聚合函数

你可以同时指定多个聚合函数,以便在数据透视表中显示多个统计结果。

import pandas as pd
# 创建一个示例DataFrame
data = {'Category': ['A', 'A', 'B', 'B', 'A', 'A'],
        'Value': [10, 20, 15, 25, 5, 10]}
df = pd.DataFrame(data)
# 创建数据透视表,同时计算总和和平均值
pivot_table = pd.pivot_table(df, values='Value', index='Category', aggfunc={'Value': ['sum', 'mean']})
print(pivot_table)

输出:

2.3 处理缺失值

你可以使用fill_value 参数来指定如何处理数据透视表中的缺失值(NaN)。

import pandas as pd
import numpy as np
# 创建一个示例DataFrame,包含缺失值
data = {'Category': ['A', 'A', 'B', 'B', 'A', 'A'],
        'Value': [10, np.nan, 15, 25, np.nan, 10]}
df = pd.DataFrame(data)
# 创建数据透视表,指定如何处理缺失值
pivot_table = pd.pivot_table(df, values='Value', index='Category', aggfunc=np.mean, fill_value=0)
print(pivot_table)

       在这个示例中,我们使用 np.NaN 表示缺失值,然后通过 fill_value=0 参数告诉 pivot_table 在计算平均值时将缺失值替换为0。这将产生一个数据透视表,其中缺失值已被替换为0,并计算了平均值。

2.4 更改行和列的顺序

       在 Pandas 中,你可以使用不同的方法来更改行和列的顺序,具体取决于你的需求。以下是一些示例:

更改行的顺序:

(a)使用 reindex() 方法:reindex() 方法允许你按照特定的顺序重新排列DataFrame的行。

import pandas as pd
# 创建一个示例DataFrame
data = {'A': [1, 2, 3],
        'B': [4, 5, 6]}
df0 = pd.DataFrame(data)
# 指定新的行顺序
new_order = [2, 0, 1]
# 使用reindex()重新排列行
df1 = df0.reindex(new_order)
print("df0 \n", df0)
print( "df1\n", df1)

输出:

(b)使用 iloc 属性:iloc 属性允许你按照整数位置选择行,并以指定的顺序重新排列它们。

import pandas as pd
# 创建一个示例DataFrame
data = {'A': [1, 2, 3],
        'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 指定新的行顺序
new_order = [2, 0, 1]
# 使用iloc重新排列行
df = df.iloc[new_order]
print(df)

输出:

更改列的顺序:

(a)使用列名列表:你可以使用列名列表以所需的顺序重新排列DataFrame的列。

import pandas as pd
# 创建一个示例DataFrame
data = {'A': [1, 2, 3],
        'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 指定新的列顺序
new_order = ['B', 'A']
# 重新排列列
df = df[new_order]
print(df)

输出:

(b)使用 reindex() 方法:你也可以使用 reindex() 方法来重新排列列,但要指定axis=1

import pandas as pd
# 创建一个示例DataFrame
data = {'A': [1, 2, 3],
        'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 指定新的列顺序
new_order = ['B', 'A']
# 使用reindex()重新排列列
df = df.reindex(columns=new_order)
print(df)

输出:

2.5 重新排列多层索引

reorder_levels() 是 Pandas 中用于重新排列多层索引(MultiIndex)级别的方法。它允许你更改多层索引的层次顺序,以适应不同的需求。以下是关于 reorder_levels() 的详细解释和示例:

reorder_levels() 方法的语法:

DataFrame.reorder_levels(order, axis=0)

参数说明:

  • order:一个整数列表或元组,表示你希望将多层索引的哪些级别移动到前面。这里的整数是级别的位置,从0开始。例如,如果你的多层索引有两个级别(0和1),你可以使用 [1, 0] 来交换这两个级别的顺序。
  • axis:指定要重新排序级别的轴,0 表示行索引,1 表示列索引。

示例:

让我们通过一个示例来了解如何使用 reorder_levels() 方法:

import pandas as pd
# 创建一个示例DataFrame
data = {'Category1': ['A', 'A', 'B', 'B', 'A', 'A'],
        'Category2': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
        'Value': [10, 20, 15, 25, 5, 10]}
df = pd.DataFrame(data)
# 将多层索引设置为行索引
df.set_index(['Category1', 'Category2'], inplace=True)
# 输出原始DataFrame
print("原始DataFrame:")
print(df)
# 使用reorder_levels()重新排列多层索引
df_reordered = df.reorder_levels([1, 0], axis=0)
# 输出重新排列后的DataFrame
print("\n重新排列后的DataFrame:")
print(df_reordered)

      在这个示例中,我们首先将多层索引设置为行索引。然后,我们使用 reorder_levels([1, 0], axis=0) 将索引级别重新排列,将 "Category2" 放在前面,然后 "Category1"。

输出:

3 数据交叉表常用功能

3.1 计算频率表

       最基本的用法是计算两个或多个因素的交叉频率。例如,你可以使用交叉表来计算性别与职业的分布情况。

import pandas as pd
# 创建一个示例DataFrame
data = {'Gender': ['Male', 'Female', 'Male', 'Female', 'Male'],
        'Occupation': ['Engineer', 'Doctor', 'Doctor', 'Engineer', 'Doctor']}
df = pd.DataFrame(data)
# 创建交叉表
cross_table = pd.crosstab(df['Gender'], df['Occupation'])
print("交叉频率表:")
print(cross_table)

使用 pd.crosstab() 函数来创建交叉频率表。在这个函数中,你传递了两个参数:

  • df['Gender']:这是要分析的第一个分类变量,表示性别。
  • df['Occupation']:这是要分析的第二个分类变量,表示职业。
  • 结果表格的行表示性别(Male 和 Female),列表示职业(Engineer 和 Doctor),每个单元格中的值表示相应性别和职业组合的数量。显示了示例数据中性别和职业的分布情况。

3.2 计算百分比表

       你可以将 normalize 参数设置为 True,以计算百分比表,显示每个单元格的相对频率而不是绝对频率。

cross_table = pd.crosstab(df['Gender'], df['Occupation'], normalize=True)
print("百分比表:")
print(cross_table)

       创建交叉表并计算百分比表:使用 pd.crosstab() 函数创建交叉频率表,但在此次使用了 normalize=True 参数。这个参数的作用是将表格中的值转换为相对频率(百分比)。这意味着每个单元格中的值表示相应性别和职业组合的相对频率,而不是绝对数量。 每个单元格中的值表示相应性别和职业组合的百分比。

输出结果:

3.3 使用 margins 参数计算边际频率

你可以通过将 margins 参数设置为 True 来计算边际频率,这将在表中添加行和列的边际总计。

cross_table = pd.crosstab(df['Gender'], df['Occupation'], margins=True)
print("边际频率表:")
print(cross_table)

       创建交叉表并计算边际频率表:使用 pd.crosstab() 函数创建交叉频率表,但在此次使用了 margins=True 参数。这个参数的作用是在表格中添加行和列的边际总计。这将在结果表格的右侧和底部分别添加边际总计行和列。 边际总计行显示了每个性别的总数量,边际总计列显示了每个职业的总数量

3.4 使用 values 参数进行加权计算

如果你有一个权重列,可以使用 values 参数来执行加权计算。

data = {'Gender': ['Male', 'Female', 'Male', 'Female', 'Male'],
        'Occupation': ['Engineer', 'Doctor', 'Doctor', 'Engineer', 'Doctor'],
        'Weight': [150, 160, 140, 170, 155]}
df = pd.DataFrame(data)
# 创建交叉表,使用Weight列进行加权计算
cross_table = pd.crosstab(df['Gender'], df['Occupation'], values=df['Weight'], aggfunc='sum')
print("加权交叉频率表:")
print(cross_table)

3.5 自定义聚合函数

        你可以使用 aggfunc 参数指定自定义聚合函数,例如 np.meannp.sumlambda x: x.max() - x.min() 等。

import numpy as np
# 创建交叉表,使用自定义聚合函数
cross_table = pd.crosstab(df['Gender'], df['Occupation'], values=df['Weight'], aggfunc=np.mean)
print("自定义聚合函数交叉频率表:")
print(cross_table)

创建交叉表并使用自定义聚合函数:使用 pd.crosstab() 函数创建交叉频率表,但在此次的参数中使用了 values 和 aggfunc。具体如下:

  • df['Gender']:指定要分析的第一个分类变量,表示性别。
  • df['Occupation']:指定要分析的第二个分类变量,表示职业。
  • values=df['Weight']:将 Weight 列作为值变量,这意味着我们将在交叉表中应用自定义聚合函数到 Weight 列上。
  • aggfunc=np.mean:指定自定义聚合函数为 NumPy 中的均值函数 np.mean,这将计算每个性别和职业组合的体重均值。

交叉频率表中每个单元格中的值表示相应性别和职业组合的体重均值。

输出:

目录
相关文章
|
1天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
12 3
|
4天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
57 31
|
5天前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
38 12
|
11天前
|
监控 物联网 数据处理
Pandas高级数据处理:数据流式计算
本文介绍了如何使用 Pandas 进行流式数据处理。流式计算能够实时处理不断流入的数据,适用于金融交易、物联网监控等场景。Pandas 虽然主要用于批处理,但通过分块读取文件、增量更新 DataFrame 和使用生成器等方式,也能实现简单的流式计算。文章还详细讨论了内存溢出、数据类型不一致、数据丢失或重复及性能瓶颈等常见问题的解决方案,并建议在处理大规模数据时使用专门的流式计算框架。
138 100
Pandas高级数据处理:数据流式计算
|
28天前
|
机器学习/深度学习 搜索推荐 数据挖掘
Pandas数据应用:广告效果评估
在数字化营销中,广告效果评估至关重要。Pandas作为Python的强大数据分析库,在处理广告数据时表现出色。本文介绍如何使用Pandas进行广告效果评估,涵盖数据读取、预览、缺失值处理、数据类型转换及常见报错解决方法,并通过代码案例详细解释。掌握这些技能,可为深入分析广告效果打下坚实基础。
41 17
|
29天前
|
数据采集 供应链 数据可视化
Pandas数据应用:供应链优化
在当今全球化的商业环境中,供应链管理日益复杂。Pandas作为Python的强大数据分析库,能有效处理库存、物流和生产计划中的大量数据。本文介绍如何用Pandas优化供应链,涵盖数据导入、清洗、类型转换、分析与可视化,并探讨常见问题及解决方案,帮助读者在供应链项目中更加得心应手。
50 21
|
30天前
|
数据采集 存储 供应链
Pandas数据应用:库存管理
本文介绍Pandas在库存管理中的应用,涵盖数据读取、清洗、查询及常见报错的解决方法。通过具体代码示例,讲解如何处理多样数据来源、格式不一致、缺失值和重复数据等问题,并解决KeyError、ValueError等常见错误,帮助提高库存管理效率和准确性。
106 72
|
1月前
|
机器学习/深度学习 数据采集 供应链
Pandas数据应用:销售预测
本文介绍如何使用Pandas进行销售预测。首先,通过获取、清洗和可视化历史销售数据,确保数据质量并理解其特征。接着,进行特征工程,构建线性回归等模型进行预测,并评估模型性能。最后,针对常见问题如数据类型不匹配、时间格式错误、内存不足和模型过拟合提供解决方案。掌握这些步骤,可有效提升销售预测的准确性,助力企业优化库存管理和提高客户满意度。
55 17
|
1月前
|
机器学习/深度学习 存储 算法
Pandas数据应用:客户流失预测
本文介绍如何使用Pandas进行客户流失预测,涵盖数据加载、预处理、特征工程和模型训练。通过解决常见问题(如文件路径错误、编码问题、列名不一致等),确保数据分析顺利进行。特征工程中创建新特征并转换数据类型,为模型训练做准备。最后,划分训练集与测试集,选择合适的机器学习算法构建模型,并讨论数据不平衡等问题的解决方案。掌握这些技巧有助于有效应对实际工作中的复杂情况。
142 95
|
1月前
|
数据采集 存储 算法
Pandas数据应用:市场篮子分析
市场篮子分析是一种用于发现商品间关联关系的数据挖掘技术,广泛应用于零售业。Pandas作为强大的数据分析库,在此领域具有显著优势。本文介绍了市场篮子分析的基础概念,如事务、项集、支持度、置信度和提升度,并探讨了数据预处理、算法选择、参数设置及结果解释中的常见问题与解决方案,帮助用户更好地进行市场篮子分析,为企业决策提供支持。
70 29

热门文章

最新文章

推荐镜像

更多