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

如何从row、col索引列表与val值列表构建任意规模的DataFrame?

如何从行/列索引列表构建指定格式的DataFrame

你可以通过两种灵活的方式实现任意规模的列表到目标DataFrame的转换,以下是具体方案:

方法一:直接构建数组+多级表头(直观可控)

这种方式手动处理数据填充和表头设置,适合需要精细控制输出样式的场景:

import pandas as pd
import numpy as np

# 输入的三个索引与值列表
row = [0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]
col = [0, 1, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
val = ['', 'Heading', 'Prio', 'Black', 'USA', 'Inve', 'CAN', 'White', 'Busy', '', '', '', '', '', 'Req', '', '', '', '', '', 'Info', 'X', 'N/A', 'N/A', 'X', 'X']

# 确定数据行和列的范围
max_data_row = max(row)
max_col = max(col)

# 创建空数组存储数据(跳过row=0的表头行)
data = np.full((max_data_row, max_col + 1), '', dtype=object)

# 填充数据到对应位置
for r, c, v in zip(row, col, val):
    if r == 0:
        continue  # 跳过表头行,后续单独处理
    data[r-1, c] = v

# 构建基础DataFrame
df = pd.DataFrame(data)

# 构建多级表头,实现"Heading"跨列效果
top_header = [''] + ['Heading'] * 5
df.columns = pd.MultiIndex.from_tuples(zip(top_header, ['']*(max_col+1)))

# 输出符合示例样式的表格
print(df.to_markdown(index=True, tablefmt="pipe"))

方法二:长格式转宽格式(自动适配规模)

这种方式利用pandas的透视功能,无需手动计算行列范围,完全适配任意规模的输入:

import pandas as pd

# 输入的三个索引与值列表
row = [0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]
col = [0, 1, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5]
val = ['', 'Heading', 'Prio', 'Black', 'USA', 'Inve', 'CAN', 'White', 'Busy', '', '', '', '', '', 'Req', '', '', '', '', '', 'Info', 'X', 'N/A', 'N/A', 'X', 'X']

# 转换为长格式DataFrame
long_df = pd.DataFrame({'row': row, 'col': col, 'val': val})

# 分离表头和数据部分
header_df = long_df[long_df['row'] == 0].set_index('col')['val']
data_df = long_df[long_df['row'] >= 1].pivot(index='row', columns='col', values='val')

# 重置数据行索引为从0开始
data_df.index = data_df.index - 1

# 构建多级表头
top_header = [header_df.get(c, '') for c in data_df.columns]
data_df.columns = pd.MultiIndex.from_tuples(zip(top_header, ['']*len(data_df.columns)))

# 输出结果
print(data_df.to_markdown(index=True, tablefmt="pipe"))

关键特性

  • 两种方法都支持任意长度的输入列表,只要row、col、val的元素数量一致即可。
  • 空值会自动填充为空字符串,与示例中的空白位置匹配。
  • 多级表头的设置实现了示例中"Heading"跨列的展示效果,若不需要合并表头,可直接使用基础DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:35:04