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

如何按第一个DataFrame的列交错合并两个DataFrame并保留指定顺序

按指定顺序合并两个DataFrame的解决方案

你需要保留df1的原始行顺序,同时将df2中对应id的行紧跟在df1对应行的下方。之前用pd.concat([df1, df2]).sort_index().reset_index()无效的原因是,该方法仅按原DataFrame的索引排序,而df2的行顺序和df1的id顺序不匹配,无法实现按id对应分组的需求。

解决步骤及代码示例

  1. 构造示例数据(已有数据可跳过):
import pandas as pd

df1 = pd.DataFrame({
    'X': ['f', 'a', 'd'],
    'Y': ['g', 'b', 'e'],
    'avg': [30, 20, 10],
    'id': [3, 1, 2]
})

df2 = pd.DataFrame({
    'X': ['D', 'A', 'F'],
    'Y': ['E', 'B', 'G'],
    'avg': [10, 0, 20],
    'id': [2, 1, 3]
})
  1. 添加辅助列实现排序控制:
# 给df1添加order列,记录原始行的顺序
df1['order'] = df1.index
# 给df2匹配对应id在df1中的order值
df2 = df2.merge(df1[['id', 'order']], on='id', how='left')

# 添加source列区分原始DataFrame,保证每组内先显示df1的行
df1['source'] = 0
df2['source'] = 1

# 合并并排序
combined = pd.concat([df1, df2]).sort_values(by=['order', 'source'])

# 移除辅助列并重置索引
result = combined.drop(columns=['order', 'source']).reset_index(drop=True)

print(result)

输出结果

X  Y  avg  id
0  f  g   30   3
1  F  G   20   3
2  a  b   20   1
3  A  B    0   1
4  d  e   10   2
5  D  E   10   2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:05:12