Pandas数据透视表列名

Pandas数据透视表列名

在数据分析时,数据透视表是一种非常常用的工具,很多分析师都用到了Pandas中的pivot_table来创建它们。在使用pivot_table函数时,我们需要定义行、列以及聚合函数,但有时我们需要为输出表设置自定义列名,例如保持列名的大小写、使用自定义文本或合并多个列名。在本文中,我们将介绍如何使用Pandas pivot_table函数自定义透视表的列名。

阅读更多:Pandas 教程

基本的Pandas pivot_table函数

我们先看一个简单的例子,构建一个数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame({
     'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'],
     'B': ['one', 'one', 'two', 'two', 'one', 'one'],
     'C': ['small', 'large', 'large', 'small', 'small', 'large'],
     'D': [1, 2, 2, 4, 3, 4]})

这里我们有两个分类变量’A’和’B’,一个数值变量’D’和一个定性变量’C’。我们可以使用pivot_table函数来获取透视表:

table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)

这将创建一个具有以下内容的数据透视表:

          C        large     small
A   B
bar one   4.0        4.0      3.0
    two   NaN        NaN      4.0
foo one   2.0        1.0      2.0
    two   2.0        0.0      NaN

通过这个例子,我们可以发现pivot_table函数默认使用了透视表的层次索引作为列名。

通过基础列名进行自定义

首先,最简单的方式是保持基础列名不变,只传入查询变量的新名称。下面的例子为每个数据值指定一个不同的名称,并保留其他信息不变:

table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
table = table.rename(columns={'large': 'big', 'small': 'little'})

通过这个简单的重命名,我们可以得到下面的数据透视表输出:

          C        big    little
A   B
bar one   4.0        4.0      3.0
    two   NaN        NaN      4.0
foo one   2.0        1.0      2.0
    two   2.0        0.0      NaN

如此一来,我们可以轻易地将输出表的列名设置为自定义名称。

通过函数进行自定义

如果我们不仅仅想要改变列名,还需要一些更加复杂的方法,那么就需要使用到一个可以处理函数的方法,而不是字典映射。我们可以自己定义一个函数,为透视表的列名添加前缀或后缀,或者提取年份等等。这里,我们使用了一个简单的加后缀的函数:

def prefix_columns(prefix, columns):
    return [f'{prefix}{c}' for c in columns]

table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
table.columns = prefix_columns('Total_', table.columns.get_level_values(1))

这个自定义函数使用了Pandas函数get_level_values来获取透视表的第一级别(即变量名’C’),返回了以’total_’为前缀的新列名。最后,我们通过把输出的新列名赋值给table的列名来完成自定义:

          Total_small    Total_large
A   B
bar one   3.0            4.0
   two   4.0            NaN
foo one   2.0            1.0
    two   NaN            2.0

到此,我们成功地将输出表的列名自定义为具有前缀的新名称。

将多个列名合并成单个列名

有时候,我们可能需要将多个列名合并成一个单独的列名。例如,在前面的示例中,我们选择将透视表的第一级别(即变量名’C’)用’total_’为前缀。然而,我们也可以选择将这些变量名整合成一个列名,例如’dense_small’和’dense_large’列可以合并为一列’dense’. 我们可以通过以下方式来完成这一任务:

table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
table.columns = table.columns.map('_'.join)

在这个示例中,我们使用了Pandas的map函数,它允许我们对列名(即columns)中的每个元素应用我们自己的函数。这里,我们将这个函数设置为’_’.join,它可以将多个列名连接在一起以创建一个新列名。最终得到的输出表如下:

          large_sum     small_sum
A   B
bar one   4.0            3.0
    two   NaN            4.0
foo one   1.0            2.0
    two   0.0            NaN

如此一来,我们顺利地将多个列名合并成单个列名。

自定义透视表的列名之结语

在本文中,我们介绍了如何使用Pandas pivot_table函数自定义透视表的列名。我们从重命名基础列名开始,一步步地提高了难度,详细讲解了函数和map函数的使用方法。希望这些内容能够对你在数据分析中使用透视表有所帮助。最后给大家送上一句话:熟能生巧!只有不断练习和实践,才能真正掌握数据分析的技能。

总结

本文主要分为四个部分介绍了如何自定义Pandas pivot_table的列名,包括基础列名自定义、函数自定义、多个列名合并、以及详细步骤。我们通过简单易懂的例子,一步步地讲解了每个部分的实现方式,希望对读者掌握如何自定义透视表的列名有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程