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

如何以Pythonic方式将Pandas的k/p列重构为指定结构的NumPy数组

问题描述

我有一个包含大量k1, p1, k2, p2,...,kn, pn格式列的长DataFrame,示例如下:

k1         p1           k2             p2           k3         p3 ...    
-0.001870   0.000659    -0.005000       0.000795    -0.003889   0.000795 ...
-0.002778   0.000556     0.000795       0.001667     0.000795   0.002778 ...

请问如何以最Pythonic的方式构建一个NumPy数组,将所有k列和p列分别归为子数组,形成类似[[[-0.001870,-0.005000,-0.003889,...],[0.000659,0.000795,0.000795...]],[[-0.002778, 0.000795, 0.000795...],[0.000556, 0.001667, 0.002778...]], ...[[...],[...]]]的结构?

解决方案

推荐两种Pythonic实现方式,均采用向量式操作避免循环,兼顾灵活性与效率:

方法一:按列名筛选(灵活通用)

适合列名包含k/p但顺序不确定的场景:

import pandas as pd
import numpy as np

# 假设你的DataFrame名为df
# 筛选所有k列、p列并转成NumPy数组
k_arr = df.filter(like='k').to_numpy()
p_arr = df.filter(like='p').to_numpy()

# 在第二个维度堆叠数组,得到目标结构
result = np.stack([k_arr, p_arr], axis=1)

说明

  • df.filter(like='k')自动匹配所有列名含k的列,无需手动罗列列名,适配大量列的场景
  • np.stack(..., axis=1)将两个形状为(行数, n)的数组,堆叠为(行数, 2, n)的结构,正好对应每行的[k子数组, p子数组]

方法二:数组切片(高效直接)

适合列严格遵循k1,p1,k2,p2...顺序的场景,直接操作底层数组效率更高:

import numpy as np

# 先将DataFrame转为NumPy数组
arr = df.to_numpy()

# 按步长切片分离k、p列
k_arr = arr[:, ::2]  # 取索引0、2、4...的列(所有k列)
p_arr = arr[:, 1::2] # 取索引1、3、5...的列(所有p列)

# 堆叠得到目标结构
result = np.stack([k_arr, p_arr], axis=1)

内容的提问来源于Stack Exchange,提问作者Ernesto Lopez Fune

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:55:28