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

如何交织Pandas Series中存储的NumPy数组并生成DataFrame?

问题描述

我有一个多层索引的Pandas Series,结构如下:

ID           metric_name          variant_name
ID-1         ordertype1           variant         ([0.01, 0.02, 0....
             ordertype2           variant         ([0.09, 0.10, 0....
dtype: object

单独查看元素时,每个元素都是包含两个numpy数组的元组:

  • 对于result.loc[('ID-1', 'ordertype1', 'variant')],结果是:
(array([0.01, 0.02, 0.03, 0.04]),
 array([0.05, 0.06, 0.07, 0.08]))
  • 对于result.loc[('ID-1', 'ordertype2', 'variant')],结果是:
(array([0.09, 0.10, 0.11, 0.12]),
 array([0.13, 0.14, 0.15, 0.16]))

需要提取这些数组的值,将每组的第一个数组和第二个数组分别交织(即先取ordertype1的第一个元素,再取ordertype2的第一个元素,接着ordertype1的第二个元素,以此类推),最终存入DataFrame的两列中,期望结果如下:

Column1  Column2
0.01     0.05
0.09     0.13
0.02     0.06
0.10     0.14
0.03     0.07
0.11     0.15
0.04     0.08
0.12     0.16
解决方案

直接通过以下代码即可实现需求:

import pandas as pd
import numpy as np

# 假设你的Series名为result
# 1. 从每个元组中拆分出两列对应的数组集合
col1_arrays = result.apply(lambda x: x[0])
col2_arrays = result.apply(lambda x: x[1])

# 2. 将数组展开并按位置交织排列
# 先把每个数组转成Series按列拼接,再堆叠实现交织
stacked_col1 = pd.concat([pd.Series(arr) for arr in col1_arrays], axis=1).stack().reset_index(drop=True)
stacked_col2 = pd.concat([pd.Series(arr) for arr in col2_arrays], axis=1).stack().reset_index(drop=True)

# 3. 合并为目标DataFrame
final_df = pd.DataFrame({'Column1': stacked_col1, 'Column2': stacked_col2})

代码说明:

  • apply(lambda x: x[0]):从每个元组中提取对应Column1的数组,同理x[1]提取Column2的数组;
  • pd.concat(..., axis=1):把不同ordertype的数组按列拼接,此时每一行对应所有ordertype的同位置元素;
  • .stack():将列索引转为行索引,自动实现“先第一个ordertype的第n个元素,再第二个ordertype的第n个元素”的交织排列;
  • 最后重置索引并合并两列,得到符合要求的结果。

如果后续有更多ordertype,这段代码无需修改即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:00:15