pandas如何按索引将2D DataFrame转换为3D结构
pandas 2D转3D结构实现方案
pandas没有直接实现该需求的内置函数,可以结合numpy操作快速实现你要的效果:
1. 场景1:单个id对应所有数据的转换
针对你给出的示例,直接提取数值后插入新维度即可:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame( data=[[1,2,3],[4,5,6],[7,8,9]], index=[1,1,1], columns=['col1','col2','col3'] ) df.index.name = 'id' # 转换为形状(3,1,3)的3D数组 res_3d = df.values[:, np.newaxis, :] print(res_3d.shape) # 输出:(3, 1, 3)
2. 场景2:存在多个不同id的通用转换
如果你的数据里有多个不同的id值,按id分组处理即可:
grouped = df.groupby('id') # 生成字典,key为id值,value为对应id的3D数组 id_3d_map = { gid: group_df.values[:, np.newaxis, :] for gid, group_df in grouped } # 查看id=1的数组形状 print(id_3d_map[1].shape) # 输出:(3, 1, 3)
补充说明
如果需要保留列名、索引等元信息,可以用xarray库的DataArray封装转换后的3D数组,方便后续带标签操作。
内容的提问来源于stack exchange,提问作者Vadim
相关产品推荐
相关产品推荐

