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

如何根据DataFrame列值将二维NumPy数组重构为三维数组?

如何根据Pandas DataFrame的列值将二维NumPy数组转换为三维数组?

这其实可以借助Pandas的分组功能快速实现,核心思路是先按Case列分组获取对应行的索引,再从二维数组中提取对应行打包成三维结构。下面是具体的步骤和代码:

1. 导入依赖并定义示例数据

首先我们先把示例数据准备好(我把原问题里的省略号替换成了具体数值方便测试):

import numpy as np
import pandas as pd

# 模拟的二维NumPy数组
two_d_array = np.array([
    [1., 0., 0., 1., 0., 0.],
    [1., 0., 0., 0., 1., 1.],
    [1., 0., 0., 1., 0., 0.],
    [1., 1., 0., 1., 0., 0.],
    [1., 1., 0., 1., 0., 0.],
    [1., 1., 0., 1., 0., 0.]
])

# 示例DataFrame
df = pd.DataFrame({"Case":[1,1,2,2,3,4]})

2. 实现转换逻辑

我们可以用groupby获取每个Case对应的行索引集合,再通过列表推导式提取对应行,最后转成三维数组:

# 获取每个Case对应的行索引集合
case_groups = df.groupby('Case').groups

# 遍历索引集合,从二维数组中提取对应行,组成三维数组
three_d_array = np.array([two_d_array[idxs] for idxs in case_groups.values()], dtype=object)

3. 结果说明

运行后得到的three_d_array就是你想要的结构:

  • 第一个元素是Case=1对应的两行二维数组
  • 第二个元素是Case=2对应的两行二维数组
  • 第三、第四个元素分别是Case=3和Case=4对应的单行二维数组

需要注意的是:因为各个分组的行数不一致(有的2行,有的1行),所以必须指定dtype=object,否则NumPy会强制统一形状导致报错。如果你的所有分组行数都相同,就可以去掉这个参数,得到一个规则的三维数组(形状为(分组数, 每组行数, 列数))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:22:29