如何让Pandas合并DataFrame后同科目列相邻排列?
解决pandas合并后同科目列相邻排列的简便方法
不用手动调整列顺序,你可以通过提取科目前缀分组排序的方式自动实现同科目列相邻排列,以下是具体实现:
核心思路
- 分离出唯一标识列(比如
ID)和所有科目列 - 对科目列名称提取共同前缀(比如从
Math_1/Math_2中提取Math) - 按前缀分组,将同科目列放在一起
- 重新组合列顺序并应用到合并后的DataFrame
代码示例
假设合并后的DataFrame为merged_df,以常见的科目_序号命名规则为例:
import pandas as pd # 示例数据 df_1 = pd.DataFrame({'ID': [1,2,3], 'Math_1': [90,85,78], 'English_1': [88,92,76]}) df_2 = pd.DataFrame({'ID': [1,2,3], 'Math_2': [92,87,80], 'English_2': [90,95,79]}) # 合并DataFrame merged_df = pd.merge(df_1, df_2, on='ID') # 1. 分离标识列和科目列 id_cols = ['ID'] subject_cols = [col for col in merged_df.columns if col not in id_cols] # 2. 按科目前缀排序,确保同科目列相邻 # 排序key:先按科目前缀,再按原列名(保证_1在前,_2在后) subject_cols_sorted = sorted(subject_cols, key=lambda x: (x.rsplit('_', 1)[0], x)) # 3. 重新设置列顺序 merged_df = merged_df[id_cols + subject_cols_sorted]
执行后,merged_df的列顺序会变为:ID, Math_1, Math_2, English_1, English_2,实现同科目列相邻排列。
灵活适配不同命名规则
如果你的科目列命名不是科目_序号(比如Math_df1/Math_df2),只需调整前缀提取逻辑即可。例如:
# 针对`科目_dfX`的命名,提取前缀 subject_cols_sorted = sorted(subject_cols, key=lambda x: (x.rsplit('_df', 1)[0], x))
这种方法无需手动列写所有科目,无论科目数量多少都能自动适配,大幅提升效率。
内容的提问来源于stack exchange,提问作者yss
相关产品推荐
相关产品推荐

