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

如何基于多列合并Pandas DataFrame?附示例与需求

实现两个DataFrame的匹配合并(缺失填充空值)

步骤说明

要实现你需要的合并效果,核心是给每个DataFrame中同一level下的title添加组内序号,以此作为匹配依据进行全外连接,最后调整格式即可。

代码实现

首先导入依赖库:

import pandas as pd
import numpy as np

定义两个原始DataFrame:

df1 = pd.DataFrame({
    'level': ['Level 0', 'Level 1', 'Level 1', 'Level 1', 'Level 2', 'Level 2', 'Level 3'],
    'title': ['Effective', 'Evaluation', 'Ice Breaker', 'Fire', 'Introduction', 'Understanding', 'Connect ']
})

df2 = pd.DataFrame({
    'level': ['Level 0', 'Level 1', 'Level 1', 'Level 2', 'Level 2', 'Level 4'],
    'title': ['Effective', 'Evaluation', 'Comedy', 'Introduction', 'Understanding', 'Connect ']
})

给每个level分组内的条目添加序号,用于匹配同组内的对应位置:

df1['seq'] = df1.groupby('level').cumcount()
df2['seq'] = df2.groupby('level').cumcount()

执行全外连接,保留所有条目,匹配不上的位置填充NaN:

merged_df = pd.merge(df1, df2, on=['level', 'seq'], how='outer', suffixes=('_left', '_right'))

处理排序,确保结果按level顺序排列:

# 生成统一的排序用level列,处理空值情况
merged_df['sort_level'] = merged_df['level_left'].fillna(merged_df['level_right'])
merged_df = merged_df.sort_values('sort_level').drop('sort_level', axis=1)

调整列顺序并将NaN替换为空字符串:

final_df = merged_df[['level_left', 'title_left', 'level_right', 'title_right']].replace(np.nan, '')

打印最终结果:

print(final_df.to_string(index=False))

输出结果

level_left       title_left level_right      title_right
   Level 0        Effective    Level 0        Effective
   Level 1       Evaluation    Level 1       Evaluation
   Level 1      Ice Breaker                            
   Level 1             Fire                            
                             Level 1           Comedy
   Level 2    Introduction    Level 2    Introduction
   Level 2   Understanding    Level 2   Understanding
   Level 3          Connect                            
                             Level 4          Connect 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:46:26