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

如何将第二个DataFrame的唯一行追加到主DataFrame(含索引处理)

仅追加第二个DataFrame唯一行的实现方案

问题说明

你原有pd.concat方案的问题是只会直接拼接两个DataFrame的全部数据,不会自动过滤掉df2中与df1重复的行。由于你需要适配DatetimeIndex场景,以下方案默认将索引值+所有列取值作为行重复的判断标准,完全兼容时间索引的处理。

核心实现逻辑

先拼接两个DataFrame,再将索引纳入重复判断维度,优先保留df1的原有行,仅追加df2中未在df1出现过的唯一行,最终恢复原有索引结构。

完整可运行代码

import pandas as pd 

df1 = pd.DataFrame(
    {
        "A": ["A0", "A1", "A2", "A3"],
        "B": ["B0", "B1", "B2", "B3"],
        "C": ["C0", "C1", "C2", "C3"],
        "D": ["D0", "D1", "D2", "D3"],
    },
    index=[0, 1, 2, 3],
)

df2 = pd.DataFrame(
    {
        "A": ["A2", "A3", "A4", "A5"],
        "B": ["B2", "B3", "B4", "B5"],
        "C": ["C2", "C3", "C4", "C5"],
        "D": ["D2", "D3", "D4", "D5"],
    },
    index=[2, 3, 4, 5],
)

# 核心去重拼接逻辑,兼容DatetimeIndex
result = pd.concat([df1, df2])\
         .reset_index()\
         .drop_duplicates(keep='first')\
         .set_index('index')

# 若你的索引有自定义名称,将set_index的参数替换为对应的索引名即可

print(result)

输出结果

A   B   C   D
index            
0   A0  B0  C0  D0
1   A1  B1  C1  D1
2   A2  B2  C2  D2
3   A3  B3  C3  D3
4   A4  B4  C4  D4
5   A5  B5  C5  D5

DatetimeIndex适配说明

该方案对DatetimeIndex完全兼容:reset_index操作会将时间索引转为datetime类型的普通列纳入去重判断,set_index操作会自动将列恢复为DatetimeIndex类型,不需要额外做类型转换。

如果你的判断逻辑不需要考虑索引,仅需匹配列值判断重复,可去掉reset_index和set_index两步,直接使用result = pd.concat([df1, df2]).drop_duplicates(keep='first')即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:03