You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将包含numpy矩阵的pandas Series转换为MultiIndex Series?

嘿,我来帮你搞定这个问题!把存着numpy矩阵的pandas Series转成MultiIndex Series其实没那么复杂,我给你一步步拆解,带例子说明更清楚~

第一步:先构造一个示例数据(方便理解)

首先咱们先模拟一个你说的那种Series——索引是普通标签,每个值都是numpy矩阵:

import pandas as pd
import numpy as np

# 创建包含numpy矩阵的Series
sample_data = {
    'Group_A': np.array([[1, 2], [3, 4]]),
    'Group_B': np.array([[5, 6], [7, 8]])
}
original_series = pd.Series(sample_data, name='matrix_values')

这个original_series的索引是['Group_A', 'Group_B'],每个元素都是2×2的numpy矩阵。

第二步:把矩阵展开成MultiIndex Series

这里有两种常用方法,你可以选顺手的:

方法一:遍历拼接(直观易懂)

这种方法适合新手,逻辑清晰,每一步都能看到变化:

# 用来存每个矩阵转成的小Series
series_collection = []

# 遍历原Series的每个元素
for original_label, matrix in original_series.items():
    # 1. 展平矩阵成一维数组
    flattened_matrix = matrix.flatten()
    # 2. 创建MultiIndex:第一层是原Series的标签,第二层是矩阵的行号,第三层是列号
    multi_idx = pd.MultiIndex.from_product(
        [[original_label], range(matrix.shape[0]), range(matrix.shape[1])],
        names=['original_group', 'row_num', 'col_num']
    )
    # 3. 把展平的数组和MultiIndex组合成Series
    temp_series = pd.Series(flattened_matrix, index=multi_idx)
    # 4. 加入到集合里
    series_collection.append(temp_series)

# 把所有小Series拼接成最终的MultiIndex Series
final_multi_series = pd.concat(series_collection)

方法二:用apply+stack(更简洁)

如果喜欢简洁风格,这种方法更高效:

# 定义函数:把单个numpy矩阵转成带行/列索引的堆叠Series
def matrix_to_stacked_series(mat):
    return pd.DataFrame(mat).stack()

# 应用函数到原Series,再调整索引层级
final_multi_series = (
    original_series.apply(matrix_to_stacked_series)
    .unstack(level=0)
    .stack(level=0)
    .reorder_levels([2, 0, 1])
)
# 给索引命名
final_multi_series.index.names = ['original_group', 'row_num', 'col_num']
看看最终结果

运行print(final_multi_series),你会得到这样的输出:

original_group  row_num  col_num
Group_A         0        0          1
                         1          2
                1        0          3
                         1          4
Group_B         0        0          5
                         1          6
                1        0          7
                         1          8
Name: matrix_values, dtype: int64
小提示

如果你的numpy矩阵形状不统一(比如有的是2×2,有的是3×3),拼接前最好先检查处理,比如统一形状或者过滤掉不符合的元素,避免报错哦~

内容的提问来源于stack exchange,提问作者Selah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:16:16