python multiindex函数

  • Post category:Python

下面是 Python 中 MultiIndex 函数的完整攻略。

概述

Pandas 中的 MultiIndex 可以理解为是多级标签,将一个 DataFrame 中的列分层组织,可以帮助我们更方便地进行数据分析和操作。

在 Pandas 中,可以使用 pd.MultiIndex.from_arrays()pd.MultiIndex.from_product()等方法来创建多级标签。另外,还可以使用DataFrame.set_index()方法将一个 DataFrame 的某个或某些列转换成 MultiIndex。

创建 MultiIndex

一般情况下,创建 MultiIndex 使用较多的是pd.MultiIndex.from_product()方法。该方法可以将若干个一维数组转换成多级行列。

import pandas as pd

df = pd.DataFrame({
    "AA": [1, 2, 3, 4],
    "BB": [5, 6, 7, 8],
    "CC": [9, 10, 11, 12],
    "DD": [13, 14, 15, 16]
})

labels_1 = ["A", "A", "B", "B"]
labels_2 = ["X", "Y", "X", "Y"]
midx = pd.MultiIndex.from_product([labels_1, labels_2], names=["Label1", "Label2"])
df.index = midx
print(df)

输出结果为:

               AA  BB  CC  DD
Label1 Label2                
A      X        1   5   9  13
       Y        2   6  10  14
B      X        3   7  11  15
       Y        4   8  12  16

另外,pd.MultiIndex.from_tuples()方法也可以用于创建 MultiIndex。

index = [("A", "X"), ("A", "Y"), ("B", "X"), ("B", "Y")]
midx = pd.MultiIndex.from_tuples(index, names=["Label1", "Label2"])
print(midx)

输出结果为:

MultiIndex([('A', 'X'),
            ('A', 'Y'),
            ('B', 'X'),
            ('B', 'Y')],
           names=['Label1', 'Label2'])

MultiIndex的层级切片

MultiIndex 可以通过 loc、iloc、xs 等函数进行层级切片,以实现针对一个或者多个层级分组的操作。下面以 loc 方法为例:

import pandas as pd

df = pd.DataFrame({
    "AA": [1, 2, 3, 4],
    "BB": [5, 6, 7, 8],
    "CC": [9, 10, 11, 12],
    "DD": [13, 14, 15, 16]
})

labels_1 = ["A", "A", "B", "B"]
labels_2 = ["X", "Y", "X", "Y"]
midx = pd.MultiIndex.from_product([labels_1, labels_2], names=["Label1", "Label2"])
df.index = midx

# 切片访问多级行列
print(df.loc["A", "X"])
print(df.loc[("A", "X"), :])

输出结果为:

AA    1
BB    5
CC    9
DD   13
Name: (A, X), dtype: int64
       AA  BB  CC  DD
Label1 Label2                
A      X        1   5   9  13

另外,也可以使用 xs 方法对 MultiIndex 进行层级切片。

import pandas as pd

df = pd.DataFrame({
    "AA": [1, 2, 3, 4],
    "BB": [5, 6, 7, 8],
    "CC": [9, 10, 11, 12],
    "DD": [13, 14, 15, 16]
})

labels_1 = ["A", "A", "B", "B"]
labels_2 = ["X", "Y", "X", "Y"]
midx = pd.MultiIndex.from_product([labels_1, labels_2], names=["Label1", "Label2"])
df.index = midx

# 使用xs方法进行行列层级切片
print(df.xs("A", level="Label1"))
print(df.xs(("A", "X"), level=["Label1", "Label2"]))

输出结果为:

        AA  BB  CC  DD
Label2                
X        1   5   9  13
Y        2   6  10  14
               AA  BB  CC  DD
Label1 Label2                
A      X        1   5   9  13

以上是关于 Python 中 MulitIndex 函数的详细介绍。