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

如何将pandas宽格式DataFrame转换为指定结构的长格式DataFrame

解决方案

你要的转换需求本质是对原DataFrame的底层数值按行拆分重塑,用numpy的reshape方法就能一行搞定,性能和简洁度都拉满:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randn(2, 12)
)
slice_sz = 6

# 核心转换代码
new_df = pd.DataFrame(df.to_numpy().reshape(-1, slice_sz))

你给出的示例数据跑这段代码输出完全符合预期:原2行12列的数组先按行展开为长度24的一维数组,再按每行6个元素重组成4行6列的结构,刚好匹配你要的顺序:第一行前6列、第一行后6列、第二行前6列、第二行后6列。


原代码报错原因

你出现大量NaN的问题来自两个错误:

  • 切片逻辑错误:pandas的iloc索引是左闭右开规则,你设置j = slice_sz - 1,写i:j会少取索引为j的列,应该直接写成i:i+slice_sz即可,不用单独计算j值。
  • 列名对齐问题:你切分出来的第二个分片的列名还是原DataFrame的6-11,append的时候会按列名匹配新表,所以新行的0-5列全部是空值,只有6-11列有数据。如果要改原循环的话,每次切分后重置列名即可:df_sliced.columns = range(slice_sz),但循环拼接的方式性能远低于直接用reshape的方案,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:15:05