📜  在 Pandas 系列中将 multiIndex 连接成单个索引(1)

📅  最后修改于: 2023-12-03 15:23:14.878000             🧑  作者: Mango

将 multiIndex 连接成单个索引

在 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 转换为一个多层级索引,可以将 yearmonth 列传递给 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() 函数来完成这个操作。这些函数强大而灵活,可以让你轻松地处理各种数据集合。