看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.MultiIndex.from_product
是一个类方法,用于通过多个可迭代对象的笛卡尔积来创建 MultiIndex
。它会生成所有输入序列中元素的组合,适用于构建基于多个分类变量的多层索引。
classmethod MultiIndex.from_product(
iterables,
sortorder=None,
names=<no_default>
)
iterables
:
必须传递的参数。包含多个可迭代对象的列表或类似结构,每个可迭代对象代表 MultiIndex
的一个层次。
MultiIndex
。每个可迭代对象将成为一个层次。即对于每个输入序列中的元素,输出将包含所有可能的组合。sortorder
:
可选参数。指定 MultiIndex
的排序顺序(按给定层次排序)。
None
MultiIndex
的某一层按升序排序。sortorder
表示你希望按哪个层次排序,层次号从 0
开始编号。names
:
可选参数。为 MultiIndex
的各层指定名称。
MultiIndex
的层次结构。MultiIndex
对象。MultiIndex.from_product
适用于构造基于多个分类变量的多层索引场景,特别是在需要生成多个变量的组合时非常有用。例如,构建日期和类别的所有组合、不同区域和产品的组合等。
MultiIndex
import pandas as pd
# 创建两个可迭代对象的笛卡尔积
iterables = [['a', 'b'], [1, 2]]
multi_index = pd.MultiIndex.from_product(iterables, names=['letter', 'number'])
# 输出 MultiIndex
f"MultiIndex:\n{multi_index}\n"
输出:
MultiIndex:
MultiIndex([('a', 1),
('a', 2),
('b', 1),
('b', 2)],
names=['letter', 'number'])
# 创建 DataFrame,并使用 MultiIndex 作为行索引
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=multi_index)
# 输出 DataFrame
f"DataFrame with MultiIndex:\n{df}\n"
输出:
DataFrame with MultiIndex:
value
letter number
a 1 10
2 20
b 1 30
2 40
MultiIndex
示例你可以通过更多的可迭代对象来创建更多层次的 MultiIndex
。
# 创建三个可迭代对象的笛卡尔积
iterables = [['a', 'b'], [1, 2], ['x', 'y']]
multi_index = pd.MultiIndex.from_product(iterables, names=['letter', 'number', 'category'])
# 输出 MultiIndex
f"MultiIndex with three levels:\n{multi_index}\n"
输出:
MultiIndex with three levels:
MultiIndex([('a', 1, 'x'),
('a', 1, 'y'),
('a', 2, 'x'),
('a', 2, 'y'),
('b', 1, 'x'),
('b', 1, 'y'),
('b', 2, 'x'),
('b', 2, 'y')],
names=['letter', 'number', 'category'])
你可以通过 sortorder
参数对特定层进行排序,例如对第一层进行排序:
# 使用 sortorder 对第一层排序
multi_index_sorted = pd.MultiIndex.from_product(iterables, sortorder=0, names=['letter', 'number', 'category'])
# 输出排序后的 MultiIndex
f"Sorted MultiIndex:\n{multi_index_sorted}\n"
输出:
Sorted MultiIndex:
MultiIndex([('a', 1, 'x'),
('a', 1, 'y'),
('a', 2, 'x'),
('a', 2, 'y'),
('b', 1, 'x'),
('b', 1, 'y'),
('b', 2, 'x'),
('b', 2, 'y')],
names=['letter', 'number', 'category'])
pandas.MultiIndex.from_product
通过生成可迭代对象的笛卡尔积创建 MultiIndex
,非常适合处理多维组合数据。在需要生成多个层次的索引并包含所有可能组合时,该方法特别有用。
更新时间:Oct. 23, 2024, 8:51 p.m. 标签:pandas python 多层索引