📅  最后修改于: 2023-12-03 15:23:14.878000             🧑  作者: Mango
在 Pandas 系列中,MultiIndex 是一种非常有用的数据结构,它可以使你在一个 DataFrame 或 Series 上使用多个维度的索引来查找数据。但是在某些情况下,将 MultiIndex 转换为单个索引可能更为方便。
要将多层索引合并为单个索引,可以使用 Pandas 中的 reset_index()
函数。在默认情况下,这个函数会将所有层级索引上移,并生成一个新的数字索引。
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [6, 7, 8, 9, 10],
'C': ['a', 'b', 'c', 'd', 'e'],
'D': [11, 12, 13, 14, 15],
})
df = df.set_index(['C', 'D'])
print(df)
这会生成一个具有两个层级索引的 DataFrame:
A B
C D
a 11 1 6
b 12 2 7
c 13 3 8
d 14 4 9
e 15 5 10
要将这个多层级索引转换为单个索引,可以使用 reset_index()
函数:
df_reset = df.reset_index()
print(df_reset)
这会生成一个具有单个索引的 DataFrame:
C D A B
0 a 11 1 6
1 b 12 2 7
2 c 13 3 8
3 d 14 4 9
4 e 15 5 10
如果你只想合并索引中的一部分层级,可以使用 reset_index()
函数的 level
参数。level
参数接受一个层级索引的列表,用于指定希望排除的索引层级。
例如,假设你不想将 D
列转换为一个单独的列,你可以将 level
参数设置为 ['C']
:
df_partial_reset = df.reset_index(level=['C'])
print(df_partial_reset)
这会生成一个具有两个层级索引的 DataFrame:
C A B
D
11 a 1 6
12 b 2 7
13 c 3 8
14 d 4 9
15 e 5 10
另一个常见的情况是,你希望将 DataFrame 中的每一列都作为单独的索引层级。Pandas 中的 set_index()
函数可以用于这个目的。传递一个列名的列表给 set_index()
函数可以将 DataFrame 转换为一个多层级索引。
例如,假设你有一个 DataFrame,其中包含年份、月份和每个月份的销售量:
sales_data = {
'year': [2018, 2018, 2019, 2019, 2020, 2020],
'month': [1, 2, 1, 2, 1, 2],
'sales': [100, 200, 300, 400, 500, 600]
}
sales_df = pd.DataFrame(sales_data)
print(sales_df)
这会生成一个类似下面的 DataFrame:
year month sales
0 2018 1 100
1 2018 2 200
2 2019 1 300
3 2019 2 400
4 2020 1 500
5 2020 2 600
要将这个 DataFrame 转换为一个多层级索引,可以将 year
和 month
列传递给 set_index()
函数:
sales_df = sales_df.set_index(['year', 'month'])
print(sales_df)
这会生成一个具有两个层级索引的 DataFrame:
sales
year month
2018 1 100
2 200
2019 1 300
2 400
2020 1 500
2 600
在 Pandas 中,将 MultiIndex 转换为单个索引非常容易,可以使用 reset_index()
函数和 set_index()
函数来完成这个操作。这些函数强大而灵活,可以让你轻松地处理各种数据集合。