代码改变世界

详细介绍:【Pandas】pandas Index objects MultiIndex.get_level_values

2025-10-15 11:20  tlnshuju  阅读(6)  评论(0)    收藏  举报

Pandas2.2 Index objects

MultiIndex selecting

方法描述
MultiIndex.get_loc(key)用于获取给定键在多级索引中的位置
MultiIndex.get_locs(seq)用于获取给定序列在多级索引中的位置
MultiIndex.get_loc_level(key[, level, …])用于获取指定层级中键的位置,并可选择是否删除该层级
MultiIndex.get_indexer(target[, method, …])用于计算目标值在多级索引中的索引位置
MultiIndex.get_level_values(level)用于获取多级索引中指定层级的所有值

pandas.MultiIndex.get_level_values()

pandas.MultiIndex.get_level_values(level) 是 [MultiIndex] 对象的一个方法,用于获取多级索引中指定层级的所有值

详细说明
  • 用途:提取 MultiIndex 中指定层级的所有值,返回一个 Index 对象
  • 参数
    • level:要提取值的层级,可以是:
      • 层级的整数索引(从0开始)
      • 层级的名称(字符串)
  • 返回值:一个 Index 对象,包含指定层级的所有值(保留原始顺序)
示例代码及结果
示例 1: 基本用法 - 通过层级索引获取值
import pandas as pd
# 创建一个多级索引
arrays = [
['A', 'A', 'B', 'B', 'C', 'C'],
[1, 2, 1, 2, 1, 2]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=['level1', 'level2'])
print("多级索引:")
print(multi_index)
# 获取第一层级的所有值
level1_values = multi_index.get_level_values(0)
print(f"\n第一层级的值:")
print(level1_values)
print(f"类型: {type(level1_values)}")
# 获取第二层级的所有值
level2_values = multi_index.get_level_values(1)
print(f"\n第二层级的值:")
print(level2_values)
print(f"类型: {type(level2_values)}")

输出结果:

多级索引:
MultiIndex([('A', 1),
            ('A', 2),
            ('B', 1),
            ('B', 2),
            ('C', 1),
            ('C', 2)],
           names=['level1', 'level2'])
第一层级的值:
Index(['A', 'A', 'B', 'B', 'C', 'C'], dtype='object', name='level1')
类型: 
第二层级的值:
Index([1, 2, 1, 2, 1, 2], dtype='int64', name='level2')
类型: 
示例 2: 通过层级名称获取值
import pandas as pd
# 创建一个多级索引
arrays = [
['X', 'X', 'Y', 'Y'],
['a', 'b', 'a', 'b'],
[1, 2, 1, 2]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second', 'third'])
print("三级索引:")
print(multi_index)
# 使用层级名称获取值
first_level = multi_index.get_level_values('first')
print(f"\n'first' 层级的值:")
print(first_level)
second_level = multi_index.get_level_values('second')
print(f"\n'second' 层级的值:")
print(second_level)
third_level = multi_index.get_level_values('third')
print(f"\n'third' 层级的值:")
print(third_level)

输出结果:

三级索引:
MultiIndex([('X', 'a', 1),
            ('X', 'b', 2),
            ('Y', 'a', 1),
            ('Y', 'b', 2)],
           names=['first', 'second', 'third'])
'first' 层级的值:
Index(['X', 'X', 'Y', 'Y'], dtype='object', name='first')
'second' 层级的值:
Index(['a', 'b', 'a', 'b'], dtype='object', name='second')
'third' 层级的值:
Index([1, 2, 1, 2], dtype='int64', name='third')
示例 3: 与 DataFrame 结合使用
import pandas as pd
# 创建一个多级索引的 DataFrame
arrays = [
['A', 'A', 'B', 'B', 'C', 'C'],
[1, 2, 1, 2, 1, 2]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=['category', 'subcategory'])
df = pd.DataFrame({
'values': [10, 20, 30, 40, 50, 60],
'scores': [1.1, 2.2, 3.3, 4.4, 5.5, 6.6]
}, index=multi_index)
print("多级索引 DataFrame:")
print(df)
# 获取各层级的值
categories = df.index.get_level_values('category')
subcategories = df.index.get_level_values('subcategory')
print(f"\n'category' 层级的值:")
print(categories)
print(f"\n'subcategory' 层级的值:")
print(subcategories)
# 分析层级值的分布
print(f"\n'category' 层级值的计数:")
print(categories.value_counts())
print(f"\n'subcategory' 层级值的计数:")
print(subcategories.value_counts())

输出结果:

多级索引 DataFrame:
                   values  scores
category subcategory
A        1                  10     1.1
         2                  20     2.2
B        1                  30     3.3
         2                  40     4.4
C        1                  50     5.5
         2                  60     6.6
'category' 层级的值:
Index(['A', 'A', 'B', 'B', 'C', 'C'], dtype='object', name='category')
'subcategory' 层级的值:
Index([1, 2, 1, 2, 1, 2], dtype='int64', name='subcategory')
'category' 层级值的计数:
C    2
B    2
A    2
Name: category, dtype: int64
'subcategory' 层级值的计数:
2    3
1    3
Name: subcategory, dtype: int64
示例 4: 处理重复值和唯一值
import pandas as pd
# 创建一个多级索引
arrays = [
['A', 'A', 'A', 'B', 'B', 'C'],
[1, 1, 2, 1, 2, 1]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=['level1', 'level2'])
print("多级索引:")
print(multi_index)
# 获取层级值
level1_values = multi_index.get_level_values(0)
level2_values = multi_index.get_level_values(1)
print(f"\n第一层级的所有值:")
print(level1_values)
print(f"\n第一层级的唯一值:")
print(level1_values.unique())
print(f"\n第二层级的所有值:")
print(level2_values)
print(f"\n第二层级的唯一值:")
print(level2_values.unique())

输出结果:

多级索引:
MultiIndex([('A', 1),
            ('A', 1),
            ('A', 2),
            ('B', 1),
            ('B', 2),
            ('C', 1)],
           names=['level1', 'level2'])
第一层级的所有值:
Index(['A', 'A', 'A', 'B', 'B', 'C'], dtype='object', name='level1')
第一层级的唯一值:
Index(['A', 'B', 'C'], dtype='object', name='level1')
第二层级的所有值:
Index([1, 1, 2, 1, 2, 1], dtype='int64', name='level2')
第二层级的唯一值:
Index([1, 2], dtype='int64', name='level2')
示例 5: 数值型层级值
import pandas as pd
# 创建一个数值型多级索引
arrays = [
[2020, 2020, 2021, 2021, 2022, 2022],
[1, 2, 1, 2, 1, 2]
]
multi_index = pd.MultiIndex.from_arrays(arrays, names=['year', 'quarter'])
print("数值型多级索引:")
print(multi_index)
# 获取数值型层级值
years = multi_index.get_level_values('year')
quarters = multi_index.get_level_values('quarter')
print(f"\n'year' 层级的值:")
print(years)
print(f"数据类型: {years.dtype}")
print(f"\n'quarter' 层级的值:")
print(quarters)
print(f"数据类型: {quarters.dtype}")
# 进行数值计算
print(f"\n年份的统计信息:")
print(f"最小年份: {years.min()}")
print(f"最大年份: {years.max()}")

输出结果:

数值型多级索引:
MultiIndex([(2020, 1),
            (2020, 2),
            (2021, 1),
            (2021, 2),
            (2022, 1),
            (2022, 2)],
           names=['year', 'quarter'])
'year' 层级的值:
Index([2020, 2020, 2021, 2021, 2022, 2022], dtype='int64', name='year')
数据类型: int64
'quarter' 层级的值:
Index([1, 2, 1, 2, 1, 2], dtype='int64', name='quarter')
数据类型: int64
年份的统计信息:
最小年份: 2020
最大年份: 2022
示例 6: 时间序列层级值
import pandas as pd
from datetime import datetime
# 创建一个时间序列多级索引
dates = pd.date_range('2023-01-01', periods=4, freq='D')
categories = ['A', 'A', 'B', 'B']
multi_index = pd.MultiIndex.from_arrays([dates, categories], names=['date', 'category'])
print("时间序列多级索引:")
print(multi_index)
# 获取时间层级值
date_values = multi_index.get_level_values('date')
category_values = multi_index.get_level_values('category')
print(f"\n'date' 层级的值:")
print(date_values)
print(f"数据类型: {date_values.dtype}")
print(f"\n'category' 层级的值:")
print(category_values)
# 时间序列分析
print(f"\n日期范围:")
print(f"开始日期: {date_values.min()}")
print(f"结束日期: {date_values.max()}")

输出结果:

时间序列多级索引:
MultiIndex([(2023-01-01 00:00:00, 'A'),
            (2023-01-02 00:00:00, 'A'),
            (2023-01-03 00:00:00, 'B'),
            (2023-01-04 00:00:00, 'B')],
           names=['date', 'category'])
'date' 层级的值:
DatetimeIndex(['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'], dtype='datetime64[ns]', name='date', freq=None)
数据类型: datetime64[ns]
'category' 层级的值:
Index(['A', 'A', 'B', 'B'], dtype='object', name='category')
日期范围:
开始日期: 2023-01-01 00:00:00
结束日期: 2023-01-04 00:00:00
应用场景
  1. 数据分析:提取特定层级的值进行统计分析
  2. 数据筛选:基于某个层级的值筛选数据
  3. 数据可视化:获取用于绘图的层级标签
  4. 分组操作:在分组聚合操作中使用层级值
  5. 数据验证:检查多级索引中各层级的值分布
注意事项
  • 返回的是 Index 对象,保留了原始顺序和重复值
  • 可以通过索引位置或层级名称来指定要提取的层级
  • 对于空的 MultiIndex,返回空的 Index
  • 提取的值保持原始数据类型(字符串、数值、时间等)
  • 可以对返回的 Index 进行进一步的操作,如 unique()、value_counts() 等

通过 get_level_values() 方法,我们可以方便地提取 MultiIndex 中任意层级的值,这对于多维数据的分析和操作非常有用。