Numpy 如何使用 Numpy 在 Pandas 的 DataFrame 中设置多列索引

Numpy 如何使用 Numpy 在 Pandas 的 DataFrame 中设置多列索引

Pandas是一个数据分析和操作工具,通过Pandas中的 DataFrame 可以实现数据整理和转换,数据集的分组,筛选等数据处理操作。在 Pandas 中,同时根据多列设置数据框的索引是非常重要的,因为一些简单的操作可能需要使用多列索引而不是单列索引。

Pandas 中,通过使用 MultiIndex 对象(多个 indexed columns) 来实现多列索引。本文中将介绍如何使用 Numpy 在 Pandas 的 DataFrame 中设置多列索引,以及如何创建单层和多层索引。

阅读更多:Numpy 教程

创建DataFrame

在开始介绍多列索引,需要先创建一个示例 DataFrame。在 Pandas 中,可以通过字典和列表的形式来创建 DataFrame。

示例代码如下:

import pandas as pd
import numpy as np

data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
        'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
        'age': [42, 52, 36, 24, 73],
        'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']}
df = pd.DataFrame(data)
Python

上面代码中,我们通过字典和列表的形式创建了一个包含5个观测值和4个变量的 DataFrame。其中变量包括“first_name”,“last_name”,“age”和“city”。

现在我们来看看如何使用 Numpy 设置多列列索引。

多列索引的设置

在创建 Pandas 数据框时,默认情况下仅具有单列索引,这意味着一次只能通过一列访问数据框中的值。如果要根据多列访问数据框的值,则必须首先将它们设置为多列索引形式。在 Pandas 中,使用 MultiIndex 对象可以轻松设置多列索引。

要创建一个多索引数据集,需要根据数据集中的列列表为 DataFrame 创建多层列索引。以下代码示例说明如何在 Pandas 的 DataFrame 中设置多列索引。

data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
        'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
        'age': [42, 52, 36, 24, 73],
        'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']}
df = pd.DataFrame(data)
ind = pd.MultiIndex.from_arrays([df['first_name'], df['last_name'], df['age'], df['city']],
                                names=('first_name', 'last_name', 'age', 'city'))
df = pd.DataFrame(data, index=ind)
Python

在上面的示例中,我们首先使用以下语句创建了 Pandas 的 DataFrame:

df = pd.DataFrame(data)
Python

在 Pandas 的 DataFrame 中,通过使用 MultiIndex 来设置多列索引。我们可以通过调用 Pandas 中 MultiIndex 的 from_arrays 方法,指定索引列名,来创建一个包含多列索引的 MultiIndex 对象,如下所示:

ind = pd.MultiIndex.from_arrays([df['first_name'], df['last_name'], df['age'], df['city']],
                                names=('first_name', 'last_name', 'age', 'city'))
Python

最后,我们可以将 MultiIndex 对象指定为 DataFrame 的索引,如下所示:

df = pd.DataFrame(data, index=ind)
Python

完成以上步骤之后,就创建了一个多层索引的 Pandas DataFrame。接下来,我们将演示如何从多层级索引的 DataFrame 中获取值。

访问多列索引

在 Pandas DataFrame 中,通过多列索引访问数据和访问单列索引数据其实是类似的。在多列索引 DataFrame 中,如果只需要访问第一列索引,可以像下面这样使用 loc[] 方法进行访问:

df.loc['Jason']
Python

上面代码中,我们使用 loc[] 方法仅通过一个参数值“Jason”访问了多层级索引的 Pandas DataFrame 中的第一个索引,然后返回与该索引关联的所有值。

如果希望同时访问两个或多个索引列,我们可以给 loc[] 方法传递一个包含每个索引的元组。例如,要访问 Pandas DataFrame 中的 name 和 age 索引列,可以使用以下代码:

df.loc[('Jason', 'Miller', 42)]
Python

由于 Pandas DataFrame 中的多列索引是有序的,因此 loc[] 方法将使用传递的一组元组中的列为每个索引进行匹配。

在访问多列索引时,还可以使用各种方法和函数。例如,使用 slice() 方法进行分片操作,根据不同的索引列名进行布尔索引,以及使用 reset_index() 方法查看所有子列索引。这些方法的使用方法与 Pandas DataFrame 中单列索引的访问方式基本相同。在此不再赘述,有兴趣的读者可以自行查阅 Pandas 官方文档。

除了使用 Numpy 设置多列索引外,还可以使用 Pandas 中的 set_index() 方法。set_index() 方法是 Pandas 中另一种设置多列索引的常用方式。

使用 set_index() 方法设置多列索引

在 Pandas 中,set_index() 方法用于指定一个或多个列,作为 DataFrame 的新索引,可以使用单个列或多个列设置索引。以下是如何使用 set_index() 方法将多个列设置为索引的示例:

data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
        'last_name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze'],
        'age': [42, 52, 36, 24, 73],
        'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']}
df = pd.DataFrame(data)

df = df.set_index(['first_name', 'last_name', 'age', 'city'])
print(df)
Python

使用 set_index() 方法将多个列设置为索引时,将使用列名称列表指定索引所使用的列。在上面的示例中,我们可以看到,使用 set_index() 方法将多个 Pandas 数据框列设置为索引时,要将列名称传递给 set_index() 方法。

单层索引

到目前为止,我们已经看到如何在 Pandas 中使用 Numpy 或 set_index() 方法设置多层级索引。此外,在 Pandas 中,还可以创建称为单层索引的单列索引,这是 Pandas 中常见的索引类型之一。在单层索引中,仅使用一个索引列访问 DataFrame 中的子集数据。

创建单层索引与多层索引相似。以下是如何使用 Pandas 中的 set_index() 方法从 Pandas DataFrame 创建单层索引的示例:

data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
        'age': [42, 52, 36, 24, 73],
        'city': ['San Francisco', 'Baltimore', 'Miami', 'Douglas', 'Boston']}
df = pd.DataFrame(data)

df = df.set_index('name')
print(df)
Python

在上面的示例中,我们使用了 name 列作为 DataFrame 的单层索引,从而方便地访问和筛选 DataFrame 中的子集数据。

总结

使用 Pandas 中的 MultiIndex 对象可以轻松设置多列索引,在多列索引的 DataFrame 中可以通过 loc[] 方法进行访问。除了使用 Numpy 的方法,还可以使用 Pandas 中的 set_index() 方法来设置多列或单列索引。

在 Pandas 中,还可以使用 reset_index() 方法对多层级索引进行重新设置模式,将每个索引层次结构化,方便进行进一步的数据操作和分析。

使用适当的索引方案可以使数据转换和操作更为简单和高效。在实际的数据分析和处理中,选择合适的索引方法往往是关键。通过本文的介绍,相信读者对 Pandas 中的多列索引及其使用方法有了初步的了解,希望能够帮助大家更好地进行相关的工作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程