pandas.io.formats.style.Styler.relabel_index#

Styler.relabel_index(labels, axis=0, level=None)[源代码]#

重新标记索引或列标题的键,以显示一组指定的值。

Added in version 1.5.0.

参数:
标签类似列表或索引

新标签显示。必须与未隐藏的基础值长度相同。

{“index”, 0, “columns”, 1}

应用于索引或列。

级别int, str, list, optional

要应用新标签的级别。如果为 None,则应用于索引或 MultiIndex 的所有未隐藏级别。

返回:
Styler

返回自身以进行链式调用。

参见

Styler.format_index

格式化索引或列标题的文本显示值。

Styler.hide

隐藏索引、列标题或指定的数据显示。

注释

作为 Styler 的一部分,这种方法允许完全由用户指定索引的显示,而不影响底层 DataFrame 数据、索引或列标题。这意味着在保持索引灵活性的同时,最终显示是可定制的。

由于 Styler 被设计为通过方法链逐步构建,此方法适用于对 当前指定的隐藏元素 做出反应。这很有用,因为它意味着如果索引或列标题的大部分已经隐藏,则不必指定所有新标签。以下产生等效的显示(注意每个案例中 labels 的长度)。

# relabel first, then hide
df = pd.DataFrame({"col": ["a", "b", "c"]})
df.style.relabel_index(["A", "B", "C"]).hide([0, 1])
# hide first, then relabel
df = pd.DataFrame({"col": ["a", "b", "c"]})
df.style.hide([0, 1]).relabel_index(["C"])

应该使用此方法,而不是 Styler.format_index() ,在以下情况之一中(见示例):

  • 需要指定的一组标签,这些标签不是底层索引键的函数。

  • 底层索引键的功能需要一个计数器变量,例如在枚举时可用的那些。

例子

基本用法

>>> df = pd.DataFrame({"col": ["a", "b", "c"]})
>>> df.style.relabel_index(["A", "B", "C"])  
     col
A      a
B      b
C      c

使用预隐藏元素进行链式操作

>>> df.style.hide([0, 1]).relabel_index(["C"])  
     col
C      c

使用 MultiIndex

>>> midx = pd.MultiIndex.from_product([[0, 1], [0, 1], [0, 1]])
>>> df = pd.DataFrame({"col": list(range(8))}, index=midx)
>>> styler = df.style  
          col
0  0  0     0
      1     1
   1  0     2
      1     3
1  0  0     4
      1     5
   1  0     6
      1     7
>>> styler.hide(
...     (midx.get_level_values(0) == 0) | (midx.get_level_values(1) == 0)
... )
... 
>>> styler.hide(level=[0, 1])  
>>> styler.relabel_index(["binary6", "binary7"])  
          col
binary6     6
binary7     7

我们也可以通过先索引然后重新标记来实现上述效果

>>> styler = df.loc[[(1, 1, 0), (1, 1, 1)]].style
>>> styler.hide(level=[0, 1]).relabel_index(["binary6", "binary7"])
... 
          col
binary6     6
binary7     7

定义一个使用枚举计数器的格式化函数。还要注意,在字符串标签的情况下,索引键的值会被传递,因此它也可以插入到标签中,使用大括号(如果字符串是预格式化的,则使用双大括号),

>>> df = pd.DataFrame({"samples": np.random.rand(10)})
>>> styler = df.loc[np.random.randint(0, 10, 3)].style
>>> styler.relabel_index([f"sample{i+1} ({{}})" for i in range(3)])
... 
                 samples
sample1 (5)     0.315811
sample2 (0)     0.495941
sample3 (2)     0.067946