Python Pandas – 使用MultiIndex的级别创建DataFrame作为列并替换索引级别名称

Python Pandas – 使用MultiIndex的级别创建DataFrame作为列并替换索引级别名称

Pandas是Python上一个较为流行的数据处理库,其中的MultiIndex类可以方便地处理多级别的索引数据,使得Pandas的数据操作更加灵活。本篇文章将为大家介绍如何使用MultiIndex的级别在DataFrame中创建列并替换索引级别名称。

MultiIndex的级别

在使用Pandas进行数据分析时,我们通常会使用DataFrame或者Series的对象,其中包含多个数据列,并以行和列的方式表示。对于这些数据集合,我们可能需要使用多级别的索引访问其中的数据,例如,我们可能会对下面这个数据集合通过两级别的索引进行访问:

One Two Three
A B 10
A C 20
B D 30

这里的数据集合有三列,其中One和Two列作为辅助索引(也称为“行索引”),而Three列将作为数据元素。我们可以通过在使用Pandas时将辅助索引设置成多级别的方式来访问数据:

import pandas as pd
data = pd.read_csv('example.csv')
df = data.set_index(['One', 'Two'])
df.loc[('A', 'B'), 'Three']

这里,我们可以使用元组(A, B)作为辅助索引的查询,获取到对应元素10。这是访问Pandas数据框架中的多级别辅助索引的方式。

在上述示例中,我们可以看到df数据框架的索引由两级别的辅助索引构成。创建这样一个数据框架的方法就是使用Pandas的MultiIndex类。

import pandas as pd
df = pd.DataFrame({'One': ['A', 'A', 'B'],
                   'Two': ['B', 'C', 'D'],
                   'Three': [10, 20, 30]})
df.set_index(['One', 'Two'], inplace=True)

这里我们使用了Pandas的DataFrame类来创建一些数据,然后使用set_index函数设置辅助索引时传入由两个列名称组成的列表即可构建一份MultiIndex类型的数据。

MultiIndex级别的创建

Python的Pandas库提供了多种方式来创建MultiIndex类型的数据,下面将分别介绍几种常用的方法。

使用from_tuples创建

我们可以通过提供一个元组列表来创建一个简单多级标签。下面是一个例子:

import pandas as pd

tuples = [('A', 'C'), ('A', 'D'), ('B', 'E'), ('B', 'F')]
multi_index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])

df = pd.DataFrame({'Third': [1, 2, 3, 4]}, index=multi_index)

print(df)

这个例子创建了一个4行1列的Pandas数据框架,其中标签部分的两级别的值分别是[('A', 'C'), ('A', 'D'), ('B', 'E'), ('B', 'F')],对应于名为'first''second'的两级别索引。

使用from_product创建

元组列表不是我们创建MultiIndex对象的唯一方式。我们可以使用from_product方法来传入一组列表对象来创建标签。例如:

import pandas as pd

col1 = ['X', 'Y', 'Z']
col2 = ['A', 'B', 'C']
multi_index = pd.MultiIndex.from_product([col1, col2], names=['first', 'second'])

df = pd.DataFrame({'Third': [1, 2, 3, 4, 5, 6, 7, 8, 9]}, index=multi_index)

print(df)

这个例子也创建了一个4行1列的Pandas数据框,其中标签的两级别的值分别是['X', 'Y', 'Z']['A', 'B', 'C']的笛卡尔积,对应于名为'first''second'的两级辅助索引。

使用from_frame创建

我们还可以使用from_frame方法直接从DataFrame对象中创建MultiIndex对象:

import pandas as pd

df = pd.DataFrame({'First':['A', 'A', 'B', 'B', 'C', 'C'],
                   'Second':['X', 'Y', 'X', 'Y', 'X', 'Y'],
                   'Third':[1, 2, 3, 4, 5 ,6]})

multi_index = pd.MultiIndex.from_frame(df[['First', 'Second']])

df = df.set_index(multi_index)
print(df)

这个例子创建了一个含有三列数据的数据框架,并利用from_frame方法来构建MultiIndex辅助索引。

利用MultiIndex创建DataFrame列

使用多级别的索引可以帮助我们更好地处理数据,而同时,使用多级别的索引,也可以更加简单地创建Pandas数据框中的列。下面我们将演示如何利用MultiIndex创建DataFrame列的例子:

import pandas as pd

idx = pd.IndexSlice

df = pd.DataFrame({
    ('A', 'B'): [1, 2], 
    ('A', 'C'): [3, 4],
    ('B', 'C'): [5, 6],
    }, index=['X', 'Y'])

df.columns.names = ['first', 'second']
print("原始的DataFrame:")
print(df)

df2 = df.stack().reset_index()
df2.columns = ['index', 'first', 'second', 'value']
print("经过stack和reset_index操作后的DataFrame:")
print(df2)

df3 = df2.pivot(index='index', columns=['first', 'second'], values='value')
df3.columns.names = ['first', 'second']
print("根据多级别索引创建过后的DataFrame:")
print(df3)

这个例子中的DataFrame包含了三列数据,并且使用多级别的列名,可以看出这样的数据结构很难进行操作。我们通过使用stack方法将所有列拆分为行,并使用reset_index方法来将行索引重新编号。然后,我们使用pivot方法来创建新的DataFrame,将(first, second)列中的值作为多级别列名。

结果输出:

原始的DataFrame:
first  A       B
second B  C  C
X      1  3  5
Y      2  4  6

经过stack和reset_index操作后的DataFrame:
  index first second  value
0     X     A      B      1
1     X     A      C      3
2     X     B      C      5
3     Y     A      B      2
4     Y     A      C      4
5     Y     B      C      6

根据多级别索引创建过后的DataFrame:
first    A     B   
second   B  C  C
index          
X        1  3  5
Y        2  4  6

替换MultiIndex级别的名称

我们可以通过设置MultiIndex对象的names属性来替换这些级别的名称:

import pandas as pd

idx = pd.IndexSlice

df = pd.DataFrame({
    ('A', 'B'): [1, 2], 
    ('A', 'C'): [3, 4],
    ('B', 'C'): [5, 6],
    }, index=['X', 'Y'])

df.columns.names = ['first', 'second']
print("原始的DataFrame:")
print(df)

df.columns = df.columns.set_names(['one', 'two'])
print("替换后的DataFrame:")
print(df)

我们使用set_names方法来替换辅助索引的名称,重新设置了这个DataFrame的列名称。

结果输出:

原始的DataFrame:
first  A       B
second B  C  C
X      1  3  5
Y      2  4  6

替换后的DataFrame:
one    A       B
two    B  C  C
X      1  3  5
Y      2  4  6

结论

本文介绍了如何使用Python的Pandas库的MultiIndex类来实现在DataFrame中创建列并替换索引级别名称。我们还演示了使用MultiIndex的级别创建DataFrame作为列的例子,并列出了几种创建MultiIndex的常用方法。最后,我们介绍了如何替换MultiIndex级别的名称。如果您想要更好地处理多级别索引的数据,Pandas是您应该了解和运用的工具之一。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程