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

如何实现pandas DataFrame指定列新增并按规则重复行转换

pandas DataFrame 行列扩展实现方案

实现思路

  • 第一步:先明确固定列(不需要修改的公共列,比如示例中的id、A、B、C)和目标列(需要按规则拆分的列,比如示例中的X、Y、Z)
  • 第二步:按目标列的数量n,将原有每行重复n次,得到基础扩展表
  • 第三步:新增n-1个带i后缀的对应列(目标列的前n-1个)
  • 第四步:按行索引规则给所有目标相关列赋值:对应位置保留原值,其余位置填0

通用实现代码

import pandas as pd

def expand_df(df, fixed_cols, target_cols):
    n = len(target_cols)
    # 1. 重复行,生成基础扩展数据
    expanded = df.loc[df.index.repeat(n)].reset_index(drop=True)
    # 2. 新增n-1个带i后缀的列
    new_cols = [f"{col}i" for col in target_cols[:-1]]
    # 初始化所有目标相关列默认值为0
    for col in new_cols + target_cols:
        expanded[col] = '0'
    # 3. 按规则赋值
    for row_idx in range(n):
        # 给原目标列赋值:第row_idx行的第row_idx个目标列填原值
        expanded.loc[row_idx::n, target_cols[row_idx]] = df[target_cols[row_idx]].repeat(n).values
        # 给新增的i列赋值:所有行号大于row_idx的位置,填对应列的原值
        if row_idx < len(new_cols):
            expanded.loc[row_idx+1::n, new_cols[row_idx]] = df[target_cols[row_idx]].repeat(n).values
    # 调整列顺序为 固定列 + 新增i列 + 原目标列
    expanded = expanded[fixed_cols + new_cols + target_cols]
    return expanded

# 测试调用
if __name__ == "__main__":
    # 原始数据
    df = pd.DataFrame(data={
        'id': ['1'],
        'A' : ['a1'],
        'B' : ['b1'],
        'C' : ['c1'],
        'X' : ['x1'],
        'Y' : ['y1'],
        'Z' : ['z1']
    })
    # 定义固定列和目标列
    fixed_cols = ['id', 'A', 'B', 'C']
    target_cols = ['X', 'Y', 'Z']
    df_new = expand_df(df, fixed_cols, target_cols)
    print(df_new)

输出验证

运行上述代码得到的df_new结构和预期结构完全一致:

id   A   B   C  Xi  Yi   X   Y   Z
0  1  a1  b1  c1   0   0  x1   0   0
1  1  a1  b1  c1  x1   0   0  y1   0
2  1  a1  b1  c1  x1  y1   0   0  z1

该实现支持任意数量的目标列,只需修改target_cols参数即可适配n个目标列的扩展需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:30:05