详细介绍:【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
应用场景
- 数据分析:提取特定层级的值进行统计分析
- 数据筛选:基于某个层级的值筛选数据
- 数据可视化:获取用于绘图的层级标签
- 分组操作:在分组聚合操作中使用层级值
- 数据验证:检查多级索引中各层级的值分布
注意事项
- 返回的是 Index 对象,保留了原始顺序和重复值
- 可以通过索引位置或层级名称来指定要提取的层级
- 对于空的 MultiIndex,返回空的 Index
- 提取的值保持原始数据类型(字符串、数值、时间等)
- 可以对返回的 Index 进行进一步的操作,如 unique()、value_counts() 等
通过 get_level_values() 方法,我们可以方便地提取 MultiIndex 中任意层级的值,这对于多维数据的分析和操作非常有用。
浙公网安备 33010602011771号