[Python办公]Pandas创建透视表入门2

pivot_table 透视表在 Pandas 中是一个非常强大和灵活的工具,它支持许多高级功能,可以用于复杂的数据分析和报告生成。以下是一些更高级的用法和详细说明

1. 多级索引(MultiIndex)

pivot_table 支持多级索引,这意味着你可以根据多个列创建行索引和列索引。这在处理复杂的

数据结构时非常有用。

import pandas as pd

# 创建一个示例 DataFrame
data = {
    '部门': ['A', 'A', 'B', 'B'],
    '职位': ['经理', '开发', '经理', '开发'],
    '薪资': [500, 600, 700, 800],
    '性别': ['男', '女', '男', '女']
}
# 将数据转化为pandas的dataframe
df = pd.DataFrame(data)
#创建透视表
pivot_table = pd.pivot_table(
    df,
    values='薪资',
    index=['部门', '职位'],
    columns=['性别'],
    aggfunc='sum'
)

pivot_table参数含义说明:

  1. data: 输入的DataFrame数据。
  2. values: 需要聚合的列。可以是单个或多个列名。
  3. index: 用于分组的列,透视表的行标签。
  4. columns: 用于分组的列,透视表的列标签。
  5. aggfunc: 聚合函数,例如mean、sum、count等。默认是mean。
  6. fill_value: 填充缺失值的值。
  7. margins: 是否添加行/列的总计项,默认是False。
  8. margins_name: 总计项的名称,默认为All。
  9. dropna: 是否丢弃所有条目为NaN的列。
  10. observed: 对于分类数据,是否仅显示实际观测到的组合。

2. 使用 margins 进行总计

设置 margins=True 将在透视表的底部和/或右侧添加总计行和列。你还可以通过 margins_name 参数自定义总计的名称。

pivot_table = pd.pivot_table(
    df,
    values='薪资',
    index='部门',
    columns='职位',
    aggfunc='sum',
    margins=True,
    margins_name='总计'
)

3. 自定义聚合函数

aggfunc 参数不仅接受预定义的聚合函数,还可以接受自定义函数。这对于执行复杂的聚合操作非常有用。

def custom_agg(x):
    return x.max() - x.min()

pivot_table = pd.pivot_table(
    df,
    values='薪资',
    index='部门',
    columns='职位',
    aggfunc=custom_agg
)

4. 处理缺失值

pivot_table 提供了几个参数来处理缺失值:

  • fill_value: 用指定的值替换 NaN 值。
  • dropna: 设置为 True 时,会删除没有数据的行和列。
pivot_table = pd.pivot_table(
    df,
    values='薪资',
    index='部门',
    columns='职位',
    aggfunc='sum',
    fill_value=0,
    dropna=False
)

5. 分组和子集化数据

你可以在 pivot_table 中使用 groupby 功能对数据进行分组,并只对特定的子集进行分析。

pivot_table = pd.pivot_table(
    df.groupby('部门').head(2),  # 只考虑每个部门的前两个记录
    values='薪资',
    index='部门',
    columns='职位',
    aggfunc='sum'
)

6. 使用计算列

pivot_table 还允许你使用计算列,即在创建透视表时动态计算新的列。

pivot_table = pd.pivot_table(
    df,
    values='薪资',
    index='部门',
    columns='职位',
    aggfunc='sum'
)
pivot_table['总薪资'] = pivot_table.sum(axis=1)  # 计算每行的总薪资

7. 多个聚合函数

你可以为不同的列指定不同的聚合函数,甚至为同一列指定多个聚合函数。

pivot_table = pd.pivot_table(
    df,
    values=['薪资', '年龄'],
    index='部门',
    columns='职位',
    aggfunc={'薪资': 'sum', '年龄': ['mean', 'max']}
)

这些高级用法使得 pivot_table 成为一个非常强大的数据分析工具,可以用于处理各种复杂的数据结构和分析需求。通过灵活地使用这些功能,你可以轻松地创建满足特定需求的透视表。

以下是带有注释的代码,展示了如何使用 Pandas 的 pivot_table 函数以及一些高级用法:

import pandas as pd

# 假设 df 是这样的 DataFrame
#    部门  职位  薪资
# 0   A    经理   500
# 1   A    开发   600
# 2   B    经理   700
# 3   B    开发   800
data = {
    '部门': ['A', 'A', 'B', 'B'],
    '职位': ['经理', '开发', '经理', '开发'],
    '薪资': [500, 600, 700, 800]
}

# 创建 DataFrame
df = pd.DataFrame(data)


# 创建透视表,按部门和职位对薪资进行求和
pivot_table = pd.pivot_table(
    df,
    values='薪资',  # 要汇总的列名
    index='部门',  # 行索引的列名
    columns='职位',  # 列索引的列名
    aggfunc='sum'  # 聚合函数
)

# 打印透视表
print(pivot_table)

# 使用 margins 进行总计
pivot_table_with_margins = pd.pivot_table(
    df,
    values='薪资',  # 要汇总的列名
    index='部门',  # 行索引的列名
    columns='职位',  # 列索引的列名
    aggfunc='sum',  # 聚合函数
    margins=True,  # 添加总计行和列
    margins_name='总计'  # 设置总计行的名称
)

# 打印带有总计的透视表
print(pivot_table_with_margins)

# 自定义聚合函数
def custom_agg(x):
    return x.max() - x.min()

# 使用自定义聚合函数创建透视表
pivot_table_custom_agg = pd.pivot_table(
    df,
    values='薪资',  # 要汇总的列名
    index='部门',  # 行索引的列名
    columns='职位',  # 列索引的列名
    aggfunc=custom_agg  # 自定义聚合函数
)

# 打印使用自定义聚合函数的透视表
print(pivot_table_custom_agg)

# 处理缺失值
pivot_table_fillna = pd.pivot_table(
    df,
    values='薪资',  # 要汇总的列名
    index='部门',  # 行索引的列名
    columns='职位',  # 列索引的列名
    aggfunc='sum',  # 聚合函数
    fill_value=0,  # 用 0 替换 NaN 值
    dropna=False  # 即使某些组合没有数据,也保留对应的行和列
)

# 打印处理缺失值后的透视表
print(pivot_table_fillna)

# 使用计算列
pivot_table_with_calculated_column = pivot_table_with_margins.copy()
pivot_table_with_calculated_column['总薪资'] = pivot_table_with_margins.sum(axis=1)  # 计算每行的总薪资

# 打印带有计算列的透视表
print(pivot_table_with_calculated_column)

# 多个聚合函数
pivot_table_multiple_aggs = pd.pivot_table(
    df,
    values=['薪资', '年龄'],  # 要汇总的列名列表
    index='部门',  # 行索引的列名
    columns='职位',  # 列索引的列名
    aggfunc={'薪资': 'sum', '年龄': ['mean', 'max']}  # 为不同列指定不同的聚合函数
)

# 打印使用多个聚合函数的透视表
print(pivot_table_multiple_aggs)

这些代码示例展示了如何使用 pivot_table 进行数据透视,包括如何添加总计、使用自定义聚合函数、处理缺失值、添加计算列以及为不同列指定多个聚合函数。通过这些示例,你可以更好地理解 pivot_table 的灵活性和强大功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

William数据分析

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值