Pandas:手动排序Pivot Table列

Pandas:手动排序Pivot Table列

在数据处理中,往往需要将某一列或几列数据作为横轴,将另外一列或几列数据作为纵轴,进而统计出任意两列数据的交叉分析结果。而Pandas库中的Pivot Table功能正好可以满足这一需求,本文将介绍在Pandas中手动排序Pivot Table列的方法。

阅读更多:Pandas 教程

1. Pivot Table简介

在Pandas中,可以通过调用DataFrame的pivot_table()方法来生成Pivot Table。下面是一个简单示例:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
                   'B': ['A', 'B', 'C'] * 4,
                   'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
                   'D': np.random.randint(1, 10, 12),
                   'E': np.random.randint(1, 10, 12)})

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

生成的Pivot Table如下所示:

bar foo
A
one 4.333 3.333
three 5.0 NaN
two NaN 4.0

上述Pivot Table的生成过程中,values参数表示所需要统计的指标列,index参数表示行索引,columns参数表示列索引。其中,行索引和列索引均可以使用列表的形式传入。

2. 手动排序列

上述示例中,生成的Pivot Table列的顺序是按照字母排序的。如果我们希望手动修改列的顺序,可以基于列索引的列表排序功能来实现。例如,我们希望将上述示例中生成的Pivot Table列的顺序调整为[‘foo’, ‘bar’],可以按照以下方式生成Pivot Table:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
                   'B': ['A', 'B', 'C'] * 4,
                   'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
                   'D': np.random.randint(1, 10, 12),
                   'E': np.random.randint(1, 10, 12)})

pt = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
pt = pt[['foo', 'bar']] # 手动排序列

生成的Pivot Table如下所示:

foo bar
A
one 3.667 5.0
three NaN 5.333
two 6.0 NaN

在这个示例中,我们利用pt[[‘foo’, ‘bar’]]这一语句来手动排序Pivot Table中的列,将原本按字母排序的列重新排序。其中,[[‘foo’, ‘bar’]]表示一个由字符串组成的列表,列表中的字符串即为需要排序的列的名称。

3. 多级列排序

当需要生成多维度的Pivot Table时,除了按照列名手动排序以外,还可以按照多个列的数据进行排序。Pandas中可以通过MultiIndex实现多级列排序。例如,我们希望按照C列和D列的数据升序排列,可以按照以下方式生成Pivot Table:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': ['one', 'one', 'two', 'three'] * 3,
                   'B': ['A', 'B', 'C'] * 4,
                   'C': ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,
                   'D': np.random.randint(1, 10, 12),
                   'E': np.random.randint(1, 10, 12)})

pt = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
pt_sorted = pt.sort_values(by=[('bar', 'foo'), ('bar', 'bar')], ascending=[True, True])

针对上述Pivot Table的排序过程中,我们按照C列和D列的数据升序排列,并将该排序结果赋值给pt_sorted。

总结

本文介绍了在Pandas中手动排序Pivot Table列的方法。对于需要排序的Pivot Table,我们可以使用基于列表的排序功能或者基于MultiIndex的多级排序功能来实现。通过合理地应用这两种方法,我们可以灵活地对Pivot Table中的任意维度进行排序,进而得到符合实际需求的统计结果。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程