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

如何基于ID键列对Pandas DataFrame的列进行相减运算

解决重复ID DataFrame与唯一ID DataFrame的匹配问题

嘿,这个问题其实用pandas的merge()方法就能轻松搞定,完全不用纠结set_index()的限制。针对你的场景(df1有重复ID、df2每个ID唯一且存在df1没有的ID),具体操作如下:

核心思路

我们需要把df2中每个ID的唯一记录,匹配到df1中所有对应ID的行上,同时保留df1的全部记录——这正是**左连接(left join)**的典型应用场景。

完整代码示例

首先先构造你给出的两个DataFrame(修正了原格式的小问题),然后执行合并:

import pandas as pd

# 构造df1
df1 = pd.DataFrame({
    'ID': ['ID1', 'ID2', 'ID1', 'ID3'],
    'A': [0.5, 1.2, 0.7, 1.1],
    'B': [2.1, 5.5, 1.2, 7.2],
    'C': [3.5, 4.3, 5.6, 10.0],
    'D': [6.6, 2.2, 6.0, 3.2]
})

# 构造df2
df2 = pd.DataFrame({
    'ID': ['ID1', 'ID2', 'ID3', 'ID4'],
    'A': [1.0, 1.5, 0.6, 1.1],
    'B': [2.0, 5.0, 1.2, 7.2],
    'C': [3.3, 4.0, 5.9, 8.5],
    'D': [4.4, 2.2, 6.2, 3.0]
})

# 执行左连接合并
merged_df = pd.merge(df1, df2, on='ID', suffixes=('_df1', '_df2'), how='left')

print(merged_df)

代码说明

  • how='left':确保df1的每一行都会被保留,即便df2中没有对应的ID(此时df2的列会填充为NaN)。
  • suffixes=('_df1', '_df2'):因为两个DataFrame的列名(除了ID)完全相同,合并后会自动添加后缀区分来源,这里我们指定更清晰的后缀名。
  • 合并后,df1中每个重复的ID都会自动匹配到df2中该ID的唯一记录,完美解决重复ID的匹配问题。

进阶需求:替换df1的指定列

如果你需要用df2的某些列替换df1的对应列,可以在合并后做简单处理。比如用df2的A列替换df1的A列:

# 只提取df2中需要的列(ID + 目标列A)
df2_subset = df2[['ID', 'A']]

# 合并到df1
temp_df = pd.merge(df1, df2_subset, on='ID', suffixes=('', '_df2'), how='left')

# 用df2的A列替换原A列,没有匹配到的保留原df1的值
temp_df['A'] = temp_df['A_df2'].fillna(temp_df['A'])

# 删除临时列
temp_df.drop('A_df2', axis=1, inplace=True)

print(temp_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:47:43