如何将第二个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
相关产品推荐
相关产品推荐

