Pandas DataFrame如何将带编号的指定列拆分为长格式行
实现方案
直接使用Pandas原生的melt方法即可高效完成宽表转长表需求,该方法为向量化运算,针对你提到的数千行数据、上百个非目标列的场景性能完全足够,不需要额外写循环逻辑。
步骤1:筛选所有待拆分的带编号列
直接复用你现有的列名筛选逻辑即可,示例中匹配V开头的列,业务场景可替换为匹配包含Test Voltage的列:
# 示例筛选规则,可替换为实际业务的列名匹配逻辑 value_cols = [col for col in df.columns if col.startswith('V')] # 业务场景使用的筛选规则: # value_cols = [col for col in df.columns if 'Test Voltage' in col]
步骤2:确定不需要拆分的保留列
不需要手动逐个指定列,直接排除待拆分列即可,适配上百个非编号列的场景:
id_cols = [col for col in df.columns if col not in value_cols]
步骤3:执行宽转长操作
df_long = pd.melt( df, id_vars=id_cols, value_vars=value_cols, var_name='V Number', # 存储原列名的新增列 value_name='V' # 存储原列取值的新增列 ) # 可选操作:如果需要单独提取编号数字(比如把V1转为数字1),可补充以下逻辑 df_long['V Number'] = df_long['V Number'].str.extract(r'(\d+)').astype(int)
转换后原有的A、B、X等非编号列的取值会自动映射到拆分后的对应行,你的示例数据转换后会从5行变为15行,完全符合需求,数千行规模的转换耗时在毫秒级。
内容的提问来源于stack exchange,提问作者DrAl
相关产品推荐
相关产品推荐

