如何将DF2的列调整为与DF1一致的顺序?不匹配列置于末尾
问题与解决方案
问题
现有两个Pandas DataFrame:
DF1
text yellow blue red orange dfsfs 0 1 1 0 sdfsdf 0 0 1 1 asdasd 1 1 1 1
DF2
text blue orange pink red black yellow dfsfs 0 1 1 0 0 1 sdfsdf 0 0 1 1 0 1 asdasd 1 1 1 1 0 0
需要将DF2的列调整为与DF1一致的顺序:匹配的列严格遵循DF1的排列顺序,DF2独有的列放在所有匹配列的末尾,预期输出如下:
text yellow blue red orange black pink dfsfs 0 1 1 0 0 1 sdfsdf 0 0 1 1 0 1 asdasd 1 1 1 1 0 1
最佳处理方式
直接通过列名列表重新索引DF2即可实现需求,步骤如下:
- 提取DF1的列名作为基准顺序
- 筛选出DF2中不在DF1列名里的字段,追加到基准顺序列表末尾
- 用新的列名列表重新排列DF2的列
代码实现
import pandas as pd # 假设已有df1和df2,若没有则先构造(示例代码) df1 = pd.DataFrame({ 'text': ['dfsfs', 'sdfsdf', 'asdasd'], 'yellow': [0, 0, 1], 'blue': [1, 0, 1], 'red': [1, 1, 1], 'orange': [0, 1, 1] }) df2 = pd.DataFrame({ 'text': ['dfsfs', 'sdfsdf', 'asdasd'], 'blue': [0, 0, 1], 'orange': [1, 0, 1], 'pink': [1, 1, 1], 'red': [0, 1, 1], 'black': [0, 0, 0], 'yellow': [1, 1, 0] }) # 生成目标列顺序:先DF1的列,再DF2独有的列 target_columns = list(df1.columns) + [col for col in df2.columns if col not in df1.columns] # 重新排列DF2的列 df2_reordered = df2[target_columns] # 输出结果 print(df2_reordered)
说明
- 这种方法简洁高效,直接利用Pandas的列索引特性完成重排
- 确保了匹配列严格遵循DF1的顺序,同时自动将DF2新增的列放在末尾
- 代码逻辑清晰,易于维护和扩展
内容的提问来源于stack exchange,提问作者Katty_one
相关产品推荐
相关产品推荐

