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

如何按指定规则重组Numpy数组?能否用Pandas直接实现?

数组重组解决方案:Numpy与Pandas实现

问题背景

现有Numpy数组:

import numpy as np
A = np.array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19],[20,21,22,23,24],[25,26,27,28,29]])

其输出形式为:

array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29]])

需要将其重组为如下结构:

array([[0,5],
       [1,6],
       [2,7],
       [3,8],
       [4,9],
       [10,15],
       [11,16],
       [12,17],
       [13,18],
       [14,19],
       [20,25],
       [21,26],
       ...,
       [24,29]])

尝试过np.reshape、transpose、flatten、np.swapaxes等组合方法未成功,且原始数据为DataFrame,希望了解Pandas的直接实现方式。


解决方案

1. Numpy实现

核心逻辑是先按2行一组拆分数组,对每组转置后展平,最终重塑为2列结构:

# 按2行一组拆分,得到三维数组(组数, 每组行数, 列数)
grouped = A.reshape(-1, 2, A.shape[1])
# 转置每组维度,展平后重塑为N行2列
result_np = grouped.transpose(0, 2, 1).flatten().reshape(-1, 2)

执行后输出:

array([[ 0,  5],
       [ 1,  6],
       [ 2,  7],
       [ 3,  8],
       [ 4,  9],
       [10, 15],
       [11, 16],
       [12, 17],
       [13, 18],
       [14, 19],
       [20, 25],
       [21, 26],
       [22, 27],
       [23, 28],
       [24, 29]])

2. Pandas直接实现

如果原始数据是DataFrame,有两种简洁方式:

方式一:分组堆叠法

import pandas as pd

df = pd.DataFrame(A)
# 按行索引每2行分组,堆叠每组后重塑结构
result_pd = df.groupby(df.index // 2).apply(lambda x: x.stack()) \
              .reset_index(drop=True).to_numpy().reshape(-1, 2)

方式二:奇偶行拼接法

拆分偶数行和奇数行,分别堆叠后按列拼接:

df = pd.DataFrame(A)
# 提取偶数行并堆叠为一维
even = df.iloc[::2, :].stack().reset_index(drop=True)
# 提取奇数行并堆叠为一维
odd = df.iloc[1::2, :].stack().reset_index(drop=True)
# 按列拼接得到目标数组
result_pd = pd.concat([even, odd], axis=1).to_numpy()

两种方式均能输出目标格式的数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:10:26