如何合并含重复列与空值的DataFrame并添加指定列
解决重复列名的DataFrame合并问题
你需要根据col_1.和col_2.两列将第一个DataFrame的col_3匹配到第二个DataFrame中,直接合并失败是因为没有明确指定匹配键,或者误将其他重复列纳入合并逻辑。以下是具体解决步骤:
步骤1:构造模拟数据(对应你的输入)
import pandas as pd import numpy as np # 包含col_3的源DataFrame df_source = pd.DataFrame({ 'col_1.': [np.nan, np.nan, 'a1.', 'a3'], 'col_2.': [np.nan, np.nan, 'a2', np.nan], 'col_3': ['yes', 'yes', 'no', 'no'] }) # 需要添加col_3的目标DataFrame df_target = pd.DataFrame({ 'col1.': ['a_1', 'a_3', 'a_5', 'a_7'], 'col2.': ['a_2', 'a_4', 'a_6', 'a_8'], 'col_1.': [np.nan, np.nan, 'a1.', 'a3'], 'col_2.': [np.nan, np.nan, 'a2', np.nan] })
步骤2:指定匹配键进行合并
从源DataFrame中仅提取用于匹配的col_1.、col_2.和需要添加的col_3,然后与目标DataFrame按匹配键左连接(保留目标DataFrame的所有行):
# 执行合并,确保只使用指定的列作为匹配键 result_df = pd.merge( df_target, df_source[['col_1.', 'col_2.', 'col_3']], on=['col_1.', 'col_2.'], how='left' )
结果验证
运行后result_df将完全符合你的预期输出:
col1. col2. col_1. col_2. col_3 0 a_1 a_2 NaN NaN yes 1 a_3 a_4 NaN NaN yes 2 a_5 a_6 a1. a2 no 3 a_7 a_8 a3 NaN no
关键说明
- 明确指定
on参数:只将col_1.和col_2.作为匹配依据,避免其他列名干扰合并逻辑。 - 左连接
how='left':保证目标DataFrame的所有行都被保留,仅匹配源DataFrame中对应的col_3值。 - 提前筛选源DataFrame的列:只保留必要的列,减少合并时的列名冲突风险。
内容的提问来源于stack exchange,提问作者user3447653
相关产品推荐
相关产品推荐

