基于带MultiIndex的Numpy数组创建Pandas DataFrame的技术问询
解决方案
1. 明确数组结构
你的array_test形状为(5, 359, 2),各维度对应:
- 第一维度:5次实验重复(命名为'1'到'5')
- 第二维度:359个独立观测值(可作为DataFrame的列)
- 第三维度:2类数据,分别是
mean(观测值均值)和uncertainty(观测值不确定度)
2. 构建多级索引DataFrame
直接通过pandas的MultiIndex和数组维度转换就能实现需求,代码如下:
import numpy as np import pandas as pd # 调整数组维度顺序:将[实验重复, 观测值, 指标]转为[实验重复, 指标, 观测值] reshaped_array = array_test.transpose(0, 2, 1) # 创建多级索引:一级是实验编号,二级是指标类型 multi_index = pd.MultiIndex.from_product( [['1', '2', '3', '4', '5'], ['mean', 'uncertainty']], names=['experiment', 'metric'] ) # 转换为DataFrame,列对应359个观测值 df = pd.DataFrame(reshaped_array.reshape(-1, 359), index=multi_index)
3. 计算5次重复的汇总均值
要得到每个观测值在5次重复中的均值(包括mean的均值、uncertainty的均值),按二级索引分组计算即可:
# 按指标类型分组,计算每个观测值的5次重复均值 summary_df = df.groupby(level='metric').mean()
4. 可选优化
如果想给观测值列自定义命名(比如obs_0到obs_358),创建DataFrame时指定columns参数:
df = pd.DataFrame( reshaped_array.reshape(-1, 359), index=multi_index, columns=[f'obs_{i}' for i in range(359)] )
内容的提问来源于stack exchange,提问作者datadatadata
相关产品推荐
相关产品推荐

