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

如何从嵌套列表快速构建指定格式的Pandas DataFrame?

当然有更简洁的实现方式!咱们可以利用 Pandas 和 NumPy 的内置函数来避免手动构造 id 列和复杂的嵌套列表推导,代码会更紧凑、易读,扩展性也更强。下面给你两种常用的优化方案:

方案一:借助 NumPy 数组重塑 + Pandas 多索引生成

这种方法适合处理规则的嵌套数组,利用 NumPy 的数组操作快速提取目标列,再用 Pandas 自动生成 id 组合:

import pandas as pd
import numpy as np

a = [[[12,23],[31,41]], [[53,68],[77,87]]]
arr = np.array(a)

# 按列优先的方式提取并展平c2、c3列数据
c2 = arr[:, 0, :].flatten(order='F')
c3 = arr[:, 1, :].flatten(order='F')

# 自动生成id1和id2的所有组合
id_pairs = pd.MultiIndex.from_product([[1,2], [1,2]], names=['id1', 'id2'])

# 直接构造目标DataFrame
df = pd.DataFrame({'id1': id_pairs.get_level_values(0),
                   'id2': id_pairs.get_level_values(1),
                   'c2': c2,
                   'c3': c3})

方案二:利用 Pandas 的多层索引与重塑操作

如果更习惯纯 Pandas 操作,可以通过构造多层索引的 DataFrame,再用 stack/unstack 完成结构转换:

import pandas as pd

a = [[[12,23],[31,41]], [[53,68],[77,87]]]

# 先基于原始嵌套结构构造多层索引的DataFrame
df = pd.DataFrame(a, index=[1,2], columns=[1,2])

# 展开每个单元格的列表、调整索引结构,最后重命名列
df = (df.apply(pd.Series.stack)
        .unstack(level=1)
        .reset_index()
        .rename(columns={'level_0': 'id1', 0: 'id2', 1: 'c2', 2: 'c3'}))

为什么这两种方案更优?

和你原来的实现相比,它们:

  • 不需要手动硬编码 id 列的列表(比如 [1,1,2,2]),当嵌套规模变化时,只需调整索引的范围即可
  • 避免了嵌套列表推导的可读性问题,逻辑更直观
  • 利用库的内置函数处理数据转换,性能更稳定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:33:47