Python Pandas – 用层次结构的名称来删除请求的级别,并返回多层索引

Python Pandas – 用层次结构的名称来删除请求的级别,并返回多层索引

Pandas是Python中非常常用的数据处理库之一。Pandas提供了对各种数据格式的轻松操作,特别是对于表格数据的操作。然而,在面对具有多层结构的表格数据时,如何删除部分级别并返回多级索引是一个需要注意的问题。本文将为大家介绍如何使用Python Pandas处理这种表格数据。

构建多级索引表格数据

我们首先来构建一个随机生成的多级表格数据:

import pandas as pd
import numpy as np

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])

这里我们使用了numpy的随机数模块生成一个8行2列的数组,并按照指定索引转换为Pandas DataFrame对象。我们可以看一下生成的表格数据,它长这个样子:

                A         B
first second                  
bar   one     1.764052  0.400157
      two     0.978738  2.240893
baz   one     1.867558 -0.977278
      two     0.950088 -0.151357
foo   one    -0.103219  0.410599
      two     0.144044  1.454274
qux   one     0.761038  0.121675
      two     0.443863  0.333674

我们可以看到,这个表格数据中有两个层次,即firstsecond

利用pandas.MultiIndex.remove_unused_levels()方法删除指定层

假如我们想要删除second层次,则可以使用remove_unused_levels()方法将其删除:

df = df.reset_index(level=1, drop=True)
df = df.reorder_levels(['second', 'first'])
df.index.remove_unused_levels()

我们可以发现,second层次已经被删除,现在仅剩下first层次:

               A         B
second                  
one     1.764052  0.400157
two     0.978738  2.240893
one     1.867558 -0.977278
two     0.950088 -0.151357
one    -0.103219  0.410599
two     0.144044  1.454274
one     0.761038  0.121675
two     0.443863  0.333674

最后一层次的删除与保留

其实这里有一个比较微妙的问题:第一种方式可以完全删除某一个层次,但是如果我们想要删除一个表格数据里面的最后一层次,该如何操作呢?如果我们按照上面的方式来删除最后一层次,那么所有数据都会合成为单层索引,就无法区分数据了。那么我们该如何操作呢?

我们可以使用get_level_values()方法获取索引的某一层次对应的值:

last_idx = df.index.get_level_values(-1)

这样,我们就获取到了表格数据最后一层的值。此时,我们可以使用reset_index()方法将其转换为正常的列:

df = df.reset_index()
df = df.drop(['second'], axis=1)
df = df.set_index(['first', last_idx])

这个时候,我们的表格数据里面已经没有second这一层次了。这个时候,我们的表格数据长这个样子:

                    A         B
first                    
bar   one     1.764052  0.400157
      two     0.978738  2.240893
baz   one     1.867558 -0.977278
      two     0.950088 -0.151357
foo   one    -0.103219  0.410599
      two     0.144044  1.454274
qux   one     0.761038  0.121675
      two     0.443863  0.333674

我们可以看到,现在表格数据仅剩下first这一层次了,而最后一层次的信息则被转换为了一列数据。

结论

本文介绍了如何利用Python Pandas操作多级索引表格数据。对于需要删除层次结构的表格数据中的部分级别的情况,我们可以使用remove_unused_levels()方法来实现。但是需要特别注意,如果需要删除最后一层次的话,我们需要使用reset_index()方法将最后一层次转换为一列数据进行保留。通过这些操作,我们可以轻松地操作多级索引表格数据。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程