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

Python Pandas如何创建新列并指定数据的起始行位置?

Pandas创建新列指定起始行实现错位列的实现方法

Pandas原生支持创建新列时指定数据起始行,完全可以实现每列逐行下移的Excel式错位列效果,核心逻辑是给列数据前置对应数量的空值,让有效数据从目标行开始写入,以下是两种可直接复用的实现方案:

  • 方案1:用shift()移位实现(最简便,适合固定逐行下移的场景)
    逐列创建时按列的顺序给数据做对应行数的下移,前面自动补空值,代码示例:

    import pandas as pd
    
    # 替换成你自己的年度数据,格式为{年度: 对应年度的数值列表}
    year_data = {
        2020: [100, 200, 300, 400],
        2021: [110, 210, 310, 410],
        2022: [120, 220, 320, 420],
        2023: [130, 230, 330, 430]
    }
    df = pd.DataFrame()
    
    # 按顺序生成列,第n列(从0开始计数)下移n行
    for col_idx, (year, values) in enumerate(year_data.items()):
        df[year] = pd.Series(values).shift(col_idx)
    

    运行后生成的DataFrame里,每列有效数据自动比上一列晚一行开始,空位置默认填充NaN,导出到Excel时会自动识别为空单元格。

  • 方案2:按行范围精准赋值(适合自定义起始行的灵活场景)
    如果需要给不同列指定非固定的起始行,可以先创建足够行数的空表,再给每列指定行范围赋值,代码示例:

    # 计算需要的总行数:列数 + 单列数据长度 - 1,避免数据被截断
    single_col_len = len(list(year_data.values())[0])
    total_rows = len(year_data) + single_col_len - 1
    df = pd.DataFrame(index=range(total_rows), columns=year_data.keys())
    
    for col_idx, (year, values) in enumerate(year_data.items()):
        # 给从col_idx行开始的连续行赋值
        df.loc[col_idx : col_idx + single_col_len - 1, year] = values
    
  • 实用提示:如果不想空位置显示NaN,可以在所有列创建完成后执行df = df.fillna('')把空值替换为空字符串,视觉效果和手动排版的Excel错位列完全一致;如果是在已有DataFrame基础上追加错位列,先执行df = df.reindex(range(total_rows))扩充足够的空行再赋值即可,不会破坏原有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:45:34