如何将两个同索引DataFrame的对应列成对合并排列?
解决方案
核心思路
先提取两组列的「基础名称」(比如从Actual Col A中提取Col A),再按「Actual列 + 对应Target列」的成对规则重构列顺序,最后用新顺序重排DataFrame即可。
具体实现代码
import pandas as pd # 读取数据(保留原有读取逻辑) actuals = pd.read_excel('PDS Monthly') targets = pd.read_excel('Targets') # 合并DataFrame(替代原merge写法,索引一致时横向拼接更高效直观) result = pd.concat([actuals, targets], axis=1) # 步骤1:提取基础列名(从Actuals的列中移除前缀"Actual ") base_names = [col.replace("Actual ", "") for col in actuals.columns] # 步骤2:构建成对的列顺序 new_col_order = [] for name in base_names: new_col_order.append(f"Actual {name}") new_col_order.append(f"Target {name}") # 步骤3:按新顺序重排列 result = result[new_col_order] print(result)
补充说明
- 合并方式优化:原代码的
merge+reset_index可以替换为pd.concat,因为两个DataFrame索引一致,横向拼接更直接高效,结果完全相同。 - 简洁写法适配:如果
targets的列顺序和actuals完全对应(即actuals.columns[0]对应targets.columns[0]),可以用一行代码生成列顺序:
但如果列顺序可能不匹配,优先用「提取基础名称」的方法,确保配对绝对准确。new_col_order = [item for pair in zip(actuals.columns, targets.columns) for item in pair] - 大规模列适配:上述逻辑完全支持45列的场景,无需修改代码,循环会自动遍历所有列完成成对排列。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

