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

合并列名基本相同但唯一ID不同的Pandas DataFrame

解决方法

可以通过Pandas的全外连接、列合并和缺失值填充来实现需求,具体步骤如下:

1. 导入依赖并创建示例数据

import pandas as pd

# 构建示例df1
df1 = pd.DataFrame({
    'ID': [1, 3, 4, 5, 8],
    'a': ['...', '.', '.', '', ''],
    'b': ['', '', '', '', ''],
    'c': ['', '', '', '', ''],
    'd': ['', '', '', '', ''],
    'pred_1': [0, 1, 1, 0, 0]
})

# 构建示例df2
df2 = pd.DataFrame({
    'ID': [2, 3, 6, 5, 7, 9],
    'a': ['...', '.', '.', '', '', ''],
    'b': ['', '', '', '', '', ''],
    'c': ['', '', '', '', '', ''],
    'd': ['', '', '', '', '', ''],
    'pred_2': [1, 1, 0, 0, 1, 1]
})

2. 全外连接两个DataFrame

以ID为键做全外连接,保留所有ID,同时会生成重复的特征列(如a_x、a_y):

merged_df = pd.merge(df1, df2, on='ID', how='outer')

3. 合并重复的特征列

对a、b、c、d这些重复列,用combine_first合并(优先取df1的值,df1为空时取df2的值),并删除临时列:

for col in ['a', 'b', 'c', 'd']:
    merged_df[col] = merged_df[f'{col}_x'].combine_first(merged_df[f'{col}_y'])
    merged_df.drop([f'{col}_x', f'{col}_y'], axis=1, inplace=True)

4. 填充预测列的缺失值为0

将pred_1和pred_2中的缺失值(NaN)填充为0,并转为整数类型:

merged_df['pred_1'] = merged_df['pred_1'].fillna(0).astype(int)
merged_df['pred_2'] = merged_df['pred_2'].fillna(0).astype(int)

5. 整理列顺序并排序

按照需求的列顺序重新排列,并按ID升序排序:

df3 = merged_df[['ID', 'a', 'b', 'c', 'd', 'pred_1', 'pred_2']].sort_values('ID').reset_index(drop=True)

执行后得到的df3就是你需要的结果:

ID    a  b  c  d  pred_1  pred_2
0   1  ...        0       0
1   2  ...        0       1
2   3    .        1       1
3   4    .        1       0
4   5             0       0
5   6    .        0       0
6   7             0       1
7   8             0       0
8   9             0       1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:51:53