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

Pandas中DataFrame合并问题:如何保留原始顺序实现合并

解决DataFrame合并后保留原始顺序的问题

嘿,这个问题我碰到过!首先咱们得先把你描述的两个DataFrame准确复现出来,这样后续操作更直观:

import pandas as pd
import numpy as np

# 创建df1,对应你给出的示例
df1 = pd.DataFrame(
    index=['B', 'A', 'C'],
    columns=['B', 'A', 'C'],
    data=[[1, np.nan, np.nan],
          [np.nan, 1, np.nan],
          [np.nan, np.nan, 2]]
)

# 创建df2,对应你给出的示例
df2 = pd.DataFrame(
    index=['C', 'E', 'D'],
    columns=['C', 'E', 'D'],
    data=[[2, 3, np.nan],
          [np.nan, 1, np.nan],
          [np.nan, np.nan, 2]]
)

你提到用df1.combine_first(df2)能实现合并,但没法保留原始顺序——这是因为pandas默认会对合并后的行、列索引按字母排序,所以咱们需要手动指定想要的顺序,用reindex方法来调整:

具体步骤:

  1. 先用combine_first完成数据合并,这一步的逻辑是用df2的非空值填充df1的缺失值,完全符合你的需求;
  2. 定义你期望的目标行顺序和目标列顺序;
  3. 用reindex对合并后的DataFrame重新排序,就能得到你想要的结果。

代码实现如下:

# 执行合并
combined_df = df1.combine_first(df2)

# 定义你想要的行、列顺序
target_row_order = ['B', 'A', 'C', 'D', 'E']
target_col_order = ['B', 'A', 'C', 'D', 'E']

# 重新索引,保留指定顺序
result_df = combined_df.reindex(index=target_row_order, columns=target_col_order)

# 查看结果
print(result_df)

运行后输出的结果就是你期望的:

B    A    C    D    E
B  1.0  NaN  NaN  NaN  NaN
A  NaN  1.0  NaN  NaN  NaN
C  NaN  NaN  2.0  NaN  3.0
D  NaN  NaN  NaN  2.0  NaN
E  NaN  NaN  NaN  NaN  1.0

补充说明:

如果你担心合并过程中索引排序影响结果,也可以先把两个DataFrame都扩展到目标行、列顺序,再执行combine_first,结果是完全一致的:

# 先扩展两个DataFrame的行、列到目标顺序
df1_extended = df1.reindex(index=target_row_order, columns=target_col_order)
df2_extended = df2.reindex(index=target_row_order, columns=target_col_order)

# 再执行合并
result_df = df1_extended.combine_first(df2_extended)

内容的提问来源于stack exchange,提问作者DPdl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:46:47