下面是 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 函数的详细介绍。