pandas.MultiIndex.set_levels#

MultiIndex.set_levels(levels, *, level=None, verify_integrity=True)[源代码][源代码]#

在 MultiIndex 上设置新级别。默认为返回新索引。

set_levels 方法提供了一种灵活的方式来更改 MultiIndex 的级别。这在需要更新 DataFrame 的索引结构而不改变数据时特别有用。该方法返回一个新的 MultiIndex,除非操作是就地执行的,确保原始索引在未明确修改的情况下保持不变。

该方法默认检查新层级与现有代码的完整性,但如果你确信你的层级与底层数据一致,可以禁用此检查。当你想执行优化或对索引层级进行特定调整,而这些调整并不严格遵循原始结构时,这会很有用。

参数:
levels序列或序列列表

要应用的新级别。

级别int, 级别名称, 或 int/级别名称 的序列 (默认 None)

要设置的级别(所有级别为 None)。

verify_integrity布尔值, 默认为 True

如果为真,则检查级别和代码是否兼容。

返回:
MultiIndex

更新了层级的新 MultiIndex

参见

MultiIndex.set_codes

在现有的 MultiIndex 上设置新代码。

MultiIndex.remove_unused_levels

从当前索引创建一个新的 MultiIndex,删除未使用的级别。

Index.set_names

设置索引或复合索引的名称。

例子

>>> idx = pd.MultiIndex.from_tuples(
...     [
...         (1, "one"),
...         (1, "two"),
...         (2, "one"),
...         (2, "two"),
...         (3, "one"),
...         (3, "two"),
...     ],
...     names=["foo", "bar"],
... )
>>> idx
MultiIndex([(1, 'one'),
    (1, 'two'),
    (2, 'one'),
    (2, 'two'),
    (3, 'one'),
    (3, 'two')],
   names=['foo', 'bar'])
>>> idx.set_levels([["a", "b", "c"], [1, 2]])
MultiIndex([('a', 1),
            ('a', 2),
            ('b', 1),
            ('b', 2),
            ('c', 1),
            ('c', 2)],
           names=['foo', 'bar'])
>>> idx.set_levels(["a", "b", "c"], level=0)
MultiIndex([('a', 'one'),
            ('a', 'two'),
            ('b', 'one'),
            ('b', 'two'),
            ('c', 'one'),
            ('c', 'two')],
           names=['foo', 'bar'])
>>> idx.set_levels(["a", "b"], level="bar")
MultiIndex([(1, 'a'),
            (1, 'b'),
            (2, 'a'),
            (2, 'b'),
            (3, 'a'),
            (3, 'b')],
           names=['foo', 'bar'])

如果传递给 set_levels() 的任何级别超过了现有长度,该参数的所有值都将存储在 MultiIndex 级别中,尽管这些值在 MultiIndex 输出中会被截断。

>>> idx.set_levels([["a", "b", "c"], [1, 2, 3, 4]], level=[0, 1])
MultiIndex([('a', 1),
    ('a', 2),
    ('b', 1),
    ('b', 2),
    ('c', 1),
    ('c', 2)],
   names=['foo', 'bar'])
>>> idx.set_levels([["a", "b", "c"], [1, 2, 3, 4]], level=[0, 1]).levels
FrozenList([['a', 'b', 'c'], [1, 2, 3, 4]])