使用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
相关产品推荐
相关产品推荐

