看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.MultiIndex
是 pandas 中用于分层索引的数据结构,允许在单个索引中存储多个级别的标签。它非常适合需要表示多重分类的复杂数据结构,例如分层行或列标签。MultiIndex
可以用于创建分组数据、透视表和层次化的索引,从而提升数据组织和分析的灵活性。
构造方法:
class pandas.MultiIndex(levels=None,
codes=None,
sortorder=None,
names=None,
dtype=None,
copy=False,
name=None,
verify_integrity=True)
levels
:序列或列表,包含每个索引级别的唯一标签值。它定义了每个层级的可能值。codes
:序列或列表,包含每个级别对应的整数索引。它对应 levels
中的标签值的编码。sortorder
:整数或 None
,表示索引应按第几个级别进行排序。如果没有设置则保持默认顺序。names
:序列或列表,指定每个级别的名称。通常是每个索引层级的标签。dtype
:索引的数据类型,默认为 object
。copy
:布尔型,表示是否复制输入数据。默认为 False
。name
:索引名称,与 names
类似,但只适用于单一名称。verify_integrity
:布尔型,默认为 True
,表示是否检查 codes
是否与 levels
一致,以确保 MultiIndex 的有效性。返回一个 MultiIndex
对象,该对象可以用作 DataFrame 或 Series 的多层次行或列索引。
MultiIndex
的属性levels
:返回每个层级的标签值。codes
:返回每个层级的整数索引编码。names
:返回索引每个层级的名称。nlevels
:返回层级的数量。size
:返回 MultiIndex 的大小,即行数。is_unique
:返回索引是否唯一。has_duplicates
:返回索引中是否存在重复值。MultiIndex
的方法from_arrays
:从多个数组创建 MultiIndex
。from_tuples
:从元组列表创建 MultiIndex
。from_product
:从笛卡尔积创建 MultiIndex
。from_frame
:从 DataFrame 创建 MultiIndex
。to_frame
:将 MultiIndex
转换为 DataFrame。get_level_values
:获取指定层级的值。droplevel
:删除指定层级。MultiIndex
适用于多层次数据的索引和管理,常见于数据分组、交叉表、数据透视表等场景。它可以灵活地表示多维数据结构,使得在数据分析时可以快速定位并操作不同层次的数据。
MultiIndex
import pandas as pd
# 使用 from_arrays 创建 MultiIndex
arrays = [['A', 'A', 'B', 'B'], ['one', 'two', 'one', 'two']]
index = pd.MultiIndex.from_arrays(arrays, names=('letters', 'numbers'))
# 输出 MultiIndex
f"MultiIndex:\n{index}\n"
输出:
MultiIndex:
MultiIndex([('A', 'one'),
('A', 'two'),
('B', 'one'),
('B', 'two')],
names=['letters', 'numbers'])
这里,MultiIndex
有两个层级:第一个层级是字母,第二个层级是数字。这种结构有助于在分层数据中进行高效操作。
# 创建 DataFrame,并使用 MultiIndex 作为行索引
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=index)
# 输出 DataFrame
f"DataFrame with MultiIndex:\n{df}\n"
输出:
DataFrame with MultiIndex:
value
letters numbers
A one 10
two 20
B one 30
two 40
在这个例子中,MultiIndex
被用作 DataFrame 的行索引,允许以分层结构组织和访问数据。
MultiIndex
# 使用 from_tuples 创建 MultiIndex
tuples = [('A', 'one'), ('A', 'two'), ('B', 'one'), ('B', 'two')]
index_from_tuples = pd.MultiIndex.from_tuples(tuples, names=('letters', 'numbers'))
# 输出 MultiIndex
f"MultiIndex from tuples:\n{index_from_tuples}\n"
输出:
MultiIndex from tuples:
MultiIndex([('A', 'one'),
('A', 'two'),
('B', 'one'),
('B', 'two')],
names=['letters', 'numbers'])
在这个例子中,我们使用元组列表创建了一个 MultiIndex
,与 from_arrays
方法类似。
to_frame
方法# 将 MultiIndex 转换为 DataFrame
multiindex_frame = index.to_frame(index=False)
# 输出
f"MultiIndex as DataFrame:\n{multiindex_frame}\n"
输出:
MultiIndex as DataFrame:
letters numbers
0 A one
1 A two
2 B one
3 B two
to_frame
方法可以将 MultiIndex
转换为 DataFrame,展示每个层级的标签。
from_product
方法生成 MultiIndex
# 使用 from_product 创建 MultiIndex
index_from_product = pd.MultiIndex.from_product([['A', 'B'], ['one', 'two']], names=['letters', 'numbers'])
# 输出 MultiIndex
f"MultiIndex from product:\n{index_from_product}\n"
输出:
MultiIndex from product:
MultiIndex([('A', 'one'),
('A', 'two'),
('B', 'one'),
('B', 'two')],
names=['letters', 'numbers'])
这个例子使用 from_product
方法通过笛卡尔积生成所有可能的组合,常用于需要列举所有组合的情况。
pandas.MultiIndex
提供了强大的分层索引功能,适用于需要分组或分层管理数据的场景。它不仅提高了数据的组织和可读性,还增强了复杂数据的灵活操作能力。通过不同的创建方法,如 from_arrays
、from_tuples
和 from_product
,用户可以灵活地构建多层次的索引体系,并结合 DataFrame 进行多维数据的管理和分析。
更新时间:Oct. 23, 2024, 8:01 a.m. 标签:pandas python 多层索引 索引