Pandas如何按条件合并DataFrame并向指定列追加数据?
解决方案
核心思路
直接利用外连接生成的两个Statement重名列做合并即可,无需做二次合并,规则完全匹配你的需求:优先取n_df的Statement值,n_df无对应Codes时自动取p_df的Statement值。
实现代码
# 1. 基于Codes字段做外连接 merged_df = pd.merge(n_df, p_df, how='outer', on='Codes') # 2. 合并Statement列,优先取n_df的取值,n_df无值时取p_df的取值 merged_df['Statement'] = merged_df['Statement_x'].combine_first(merged_df['Statement_y']) # 3. 删除外连接生成的多余Statement列 merged_df = merged_df.drop(columns=['Statement_x', 'Statement_y']) # 可选:调整列顺序,和原n_df的结构对齐,保留n_df原有其他字段 col_order = ['Statement', 'Codes'] + [col for col in n_df.columns if col not in ['Statement', 'Codes']] + ['Other_Codes'] merged_df = merged_df[col_order]
效果验证
针对你提供的示例数据,最终输出的merged_df核心字段结果如下:
| Statement | Codes | Other_Codes |
|---|---|---|
| Statement 1 | CD.Ex-1 | NaN |
| Statement 2 | CD.Ex-2 | NC.b |
| Statement 3 | CD.Ex-3 | NaN |
| Statement 4 | CD.Ex-4 | NC.d |
| Statement 5 | CD.Ex-5 | NaN |
| Statement A | CD.Ex-A | NC.a |
| Statement B | CD.Ex-B | NC.c |
| Statement C | CD.Ex-C | NC.e |
完全符合你的4项需求:
- 基于Codes完成合并,保留所有存在于两个表的Codes
- p_df独有Codes自动追加到结果表
- p_df独有Codes对应的Statement、Other_Codes同步保留
- 同Codes的Statement冲突时优先取n_df的取值
内容的提问来源于stack exchange,提问作者clines
相关产品推荐
相关产品推荐

