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

Dataframe行列重塑求助:指定列转表头并构造新列

解决方案:Dataframe列重排与移位填充需求

嘿,我明白你遇到的问题了——pivot表确实不太适合处理这种移位填充的需求,咱们换个更直接的思路来实现你的三个要求。下面是完整的代码实现,每一步都有详细解释:

步骤1:构造原始测试数据

首先咱们先把你给出的原始Dataframe构造出来,方便复现和测试:

import pandas as pd

df = pd.DataFrame({
    'A': [1,2,3,4,5],
    'B': ['a','b','c','d','e'],
    'C': ['x','y','z','p','q'],
    'D': [11,22,33,44,55],
    'E': ['k','j','h','g','f'],
    'F': [9,10,11,12,13]
})

步骤2:生成以原A列值为表头的移位填充列

这一步是核心,要实现原C列值按行右移填充到对应表头列:

# 提取原C列的所有值
c_values = df['C'].values
# 初始化存储移位后数据的列表
shifted_c_data = []

# 遍历每一行,生成对应的移位数据
for idx in range(len(df)):
    # 从当前行开始取C列的值,不足5个的部分补空值
    current_row = list(c_values[idx:]) + [None] * (5 - len(c_values[idx:]))
    shifted_c_data.append(current_row)

# 转为Dataframe,列名用原A列的数值(转成字符串避免索引冲突)
shifted_c_df = pd.DataFrame(shifted_c_data, columns=df['A'].astype(str).tolist())

这样处理后,第一行会填充C列的全部值,第二行从C列的第二个值开始填充,以此类推,完美实现“按行右移填充”的效果。

步骤3:生成M1-M5列(全量填充原F列值)

这个需求很简单,只需要把原F列的所有值重复到每一行即可:

# 提取原F列的所有值
f_values = df['F'].tolist()
# 生成M列的Dataframe,每一行都是F列的全量值
m_columns = pd.DataFrame([f_values]*len(df), columns=[f'M{i+1}' for i in range(5)])

步骤4:拼接所有部分得到最终结果

最后把原表的B、D、E列,加上刚才生成的移位列和M列,按列拼接起来:

# 按列拼接所有Dataframe
final_df = pd.concat([df[['B', 'D', 'E']], shifted_c_df, m_columns], axis=1)

# 打印查看结果
print(final_df)

运行后得到的结果完全符合你的需求:

  • 新表头包含原A列的1-5作为列名
  • C列的值按行右移填充到对应列
  • M1-M5列每一行都填充了原F列的所有值

如果你的新表中D列的数值(11,12,13...)是笔误需要递增的话,只需要在拼接后加一行:

final_df['D'] = 11 + final_df.index

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:22:29