Python Pandas - 重命名 MultiIndex 标签
重命名 Pandas 数据结构的 MultiIndex 标签是一项常见任务,尤其是在处理层次化数据集时。这涉及到重命名 MultiIndex 对象的特定标签、轴名称或索引级别。Pandas 提供了几种方法来高效地重命名 MultiIndex 对象中的索引标签、列标签或索引级别 −
rename():重命名特定的索引或列标签。
rename_axis():重命名索引或列的轴名称。
set_names():直接设置或更改 MultiIndex 级别的名称。
在本教程中,您将学习各种重命名 Pandas 中 MultiIndex 数据结构标签和名称的方法。
使用 rename() 重命名 MultiIndex 标签
要在 MultiIndex 对象中重命名索引或列的标签,您可以使用 pandas 的 DataFrame.rename() 方法。此方法通过 index 和 column 参数,有效地重命名 pandas 对象中索引或列的单个标签。
示例:重命名特定的索引标签
以下是使用 df.rename() 方法重命名 MultiIndex DataFrame 的特定索引标签的基本示例。
import pandas as pd
# 创建 MultiIndex 对象
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('A', 'three'),('B', 'one'), ('B', 'two'), ('B', 'three')])
# 创建 DataFrame
data = [[1, 2], [3, 4], [1, 1], [5, 6], [7, 8], [2, 2]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])
# 显示输入 DataFrame
print('原始 MultiIndex DataFrame:\n',df)
# 重命名特定的索引标签
df_renamed = df.rename(index={"A": "aaa", "one": "1"})
print("重命名后的 DataFrame:")
print(df_renamed)
以上代码的输出如下 −
Original MultiIndexed DataFrame:
| X | Y | ||
|---|---|---|---|
| A | one | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | one | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |
| X | Y | ||
|---|---|---|---|
| aaa | 1 | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | 1 | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |
示例:重命名特定的列标签
以下是使用 df.rename() 方法重命名 MultiIndex DataFrame 的特定列标签的另一个示例。
import pandas as pd
# 创建 MultiIndex 对象
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('A', 'three'),('B', 'one'), ('B', 'two'), ('B', 'three')])
# 创建 DataFrame
data = [[1, 2], [3, 4], [1, 1], [5, 6], [7, 8], [2, 2]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])
# 显示输入 DataFrame
print('原始 MultiIndex DataFrame:\n',df)
# 重命名列
df_renamed = df.rename(columns={'X': "col0", 'Y': "col1"})
print("重命名后的 DataFrame:")
print(df_renamed)
以上代码的输出如下 −
Original MultiIndexed DataFrame:
| X | Y | ||
|---|---|---|---|
| A | one | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | one | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |
| col0 | col1 | ||
|---|---|---|---|
| A | one | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | one | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |
重命名 MultiIndex 轴名称
pandas 的 DataFrame.rename_axis() 方法用于重命名或设置 MultiIndex 中的索引级别名称。这在处理多级索引时特别有用。
示例:指定/重命名索引级别的名称
此示例演示如何使用 df.rename_axis() 方法重命名 MultiIndexed DataFrame 中索引级别的名称。
import pandas as pd
# 创建 MultiIndex 对象
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('A', 'three'),('B', 'one'), ('B', 'two'), ('B', 'three')])
# 创建 DataFrame
data = [[1, 2], [3, 4], [1, 1], [5, 6], [7, 8], [2, 2]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])
# 显示输入 DataFrame
print('原始 MultiIndexed DataFrame:\n',df)
# 为索引级别设置名称
result = df.rename_axis(index=["level1", "level2"])
print("结果 DataFrame:")
print(result)
以上代码的输出如下 −
原始 MultiIndexed DataFrame:
| X | Y | ||
|---|---|---|---|
| A | one | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | one | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |
| X | Y | ||
|---|---|---|---|
| level1 | level2 | ||
| A | one | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | one | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |
使用 set_names() 重命名 MultiIndex 级别
pandas 的 Index.set_names() 方法用于直接重命名 MultiIndex 的级别。此方法允许您设置或更改索引中各个级别的名称。
示例:重命名 MultiIndex 级别的名称
此示例演示如何使用 Index.set_names() 方法更改 MultiIndex 级别的名称。
import pandas as pd
# 创建 MultiIndex 对象
index = pd.MultiIndex.from_tuples([('A', 'one'), ('A', 'two'), ('A', 'three'),('B', 'one'), ('B', 'two'), ('B', 'three')],
names=["level0", "level1"])
# 创建 DataFrame
data = [[1, 2], [3, 4], [1, 1], [5, 6], [7, 8], [2, 2]]
df = pd.DataFrame(data, index=index, columns=['X', 'Y'])
# 显示输入 DataFrame
print('原始 MultiIndexed DataFrame:\n',df)
# 重命名特定级别
df.index= df.index.set_names("new_name", level=0)
print("结果 DataFrame:")
print(df)
以上代码的输出如下 −
原始 MultiIndexed DataFrame:
| X | Y | ||
|---|---|---|---|
| level1 | level2 | ||
| A | one | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | one | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |
| X | Y | ||
|---|---|---|---|
| new_name | level2 | ||
| A | one | 1 | 2 |
| two | 3 | 4 | |
| three | 1 | 1 | |
| B | one | 5 | 6 |
| two | 7 | 8 | |
| three | 2 | 2 |