如何基于多列合并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
相关产品推荐
相关产品推荐

