Python Pandas数据行列转换:将new_c_header列值转为新表头
实现方案
你可以通过melt + pivot的组合实现需求,核心逻辑是先把多列属性展开为行,再按表头字段转置为列,具体代码如下:
import pandas as pd # 假设原始数据已读取为df # 可选:如果原始空单元格是空白字符串而非NaN,先做格式转换 df = df.replace(r'^\s*$', pd.NA, regex=True) # 第一步:将3个Attribute列从宽格式转为长格式 df_melted = df.melt( id_vars=['prefix', 'new_c_header'], value_vars=['1Attribute', '2Attribute', '3Attribute'], value_name='val' ) # 第二步:删除空值(对应Overage行的空Attribute条目) df_melted = df_melted.dropna(subset=['val']) # 第三步:将new_c_header的取值转为列名完成转置 df_result = df_melted.pivot( index=['prefix', 'variable'], columns='new_c_header', values='val' ).reset_index() # 第四步:清理冗余列,调整输出格式 df_result = df_result.drop(columns=['variable']).reset_index(drop=True) # 若不需要保留空的Overage列可执行下行代码删除 # df_result = df_result.drop(columns=['Overage per Full Batch (Kg)']) print(df_result)
运行后输出的df_result就和你预期的目标格式完全一致。
内容的提问来源于stack exchange,提问作者specmer
相关产品推荐
相关产品推荐

