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

使用Pandas处理DataFrame:拆分Top列、基于Bot列新增行实现宽表转长表

Pandas 格式调整实现方案

你可以直接使用以下代码完成需求,运行后即可得到你期望的输出结构:

import pandas as pd
import re

# 读取原始CSV文件
df = pd.read_csv('xxx.CSV')

# 1. 预处理列名,解决Bot列重名问题,将同组的Top、Bot列绑定
top_suffix_list = [re.search(r'\((.*?)\)', col).group(1) for col in df.columns if col.startswith('Top')]
new_col_names = []
bot_index = 0
for col in df.columns:
    if col.startswith('Top'):
        suffix = re.search(r'\((.*?)\)', col).group(1)
        new_col_names.append(f'Top_{suffix}')
    elif col.startswith('Bot'):
        new_col_names.append(f'Bot_{top_suffix_list[bot_index]}')
        bot_index += 1
    else:
        new_col_names.append(col)
df.columns = new_col_names

# 2. 宽表转长表,将每组Top/Bot列转为独立行
df_long = pd.wide_to_long(
    df,
    stubnames=['Top', 'Bot'],
    i=['Job', 'Lot'],
    j='suffix',
    sep='_',
    suffix='.+'
).reset_index()

# 3. 拆分后缀得到Layer、T-s、Circ三个字段
df_long[['Layer', 'T-s', 'Circ']] = df_long['suffix'].str.split('-', expand=True)

# 4. 调整列顺序得到最终结果
final_df = df_long[['Job', 'Lot', 'Layer', 'T-s', 'Circ', 'Top', 'Bot']]

print(final_df)

核心逻辑说明

  • 首先处理原始数据中重复的Bot列名,将每个Bot列和前面对应的Top列做绑定,避免后续转换时数据匹配错误
  • 使用Pandas内置的pd.wide_to_long函数完成宽表到长表的转换,自动保留Job、Lot两列的原有值
  • 按-切割Top列的后缀信息,直接得到要求的三个拆分字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:09:03