如何按指定规则重组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
相关产品推荐
相关产品推荐

