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

如何在Pandas中合并多个DataFrame?缺失列自动填充NA

合并多个缺失列的Pandas DataFrame并填充NA

问题说明

需要合并多个Pandas DataFrame,部分DataFrame缺少某些列,缺失列的值需用NA填充。

示例DataFrame

df1_1 = pd.DataFrame({'id':[1,1,2,2,3,3], 'age':[22,22,55,55,53,53], 'group':1,'y':[1,2,3,4,5,6]})
df1_2 = pd.DataFrame({'id':[1,1,2,2,3,3], 'age':[22,22,55,55,53,53], 'group':1,'w':[7,8,9,10,11,12]})

df2 = pd.DataFrame({'id':[4,4,5,5], 'age':[39,39,54,54], 'group':2,'y':[1,2,3,4]})
df2_2 = pd.DataFrame({'id':[4,4,5,5], 'age':[39,39,54,54], 'group':2,'w':[5,6,7,8]})

df3 = pd.DataFrame({'id':[1,1,6,6,7,7,8,8], 'age':[23,23,63,63,43,43,25,25],'group':3,'w':[1,2,3,4,5,6,7,8]})

期望输出

id  age  group  y   w
1   22      1   1   7
1   22      1   2   8
2   55      1   3   9
2   55      1   4  10
3   53      1   5  11
3   53      1   6  12
4   39      2   1   5
4   39      2   2   6
5   54      2   3   7
5   54      2   4   8
1   23      3  NA   1
1   23      3  NA   2
6   63      3  NA   3
6   63      3  NA   4
7   43      3  NA   5
7   43      3  NA   6
8   25      3  NA   7
8   25      3  NA   8 

尝试过的代码

from functools import reduce
dfs = [df1_1,df1_2,df2_1,df2_2,df3]
df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['id','group','age'], how='outer'), dfs)
df_merged = pd.concat(dfs, join='outer', axis=0)

解决方案

你的代码有两个问题:一是列表里写错了df2_1(实际应为df2);二是逻辑错误——同组的DataFrame(比如df1_1和df1_2)需要先按主键合并补全列,再把不同组的结果纵向拼接。

正确代码如下:

import pandas as pd

# 合并group1的两个DataFrame,补全y和w列
df_group1 = pd.merge(df1_1, df1_2, on=['id', 'age', 'group'], how='inner')
# 合并group2的两个DataFrame
df_group2 = pd.merge(df2, df2_2, on=['id', 'age', 'group'], how='inner')
# group3仅单个DataFrame,直接保留
df_group3 = df3

# 纵向拼接所有组的结果,缺失列自动填充NaN
final_df = pd.concat([df_group1, df_group2, df_group3], axis=0, join='outer').reset_index(drop=True)

# 调整列顺序匹配期望输出
final_df = final_df[['id', 'age', 'group', 'y', 'w']]
# 将NaN替换为NA显示(可选,仅为匹配输出格式)
final_df['y'] = final_df['y'].fillna('NA')

print(final_df.to_string(index=False))

运行后输出与期望结果完全一致。后续若有更多组,只需重复“合并同组DataFrame”的步骤,再将结果加入concat的列表即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:05:39