You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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即可实现需求,步骤如下:

  1. 提取DF1的列名作为基准顺序
  2. 筛选出DF2中不在DF1列名里的字段,追加到基准顺序列表末尾
  3. 用新的列名列表重新排列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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:57:41