expected = df.groupby(['A', 'B'], as_index=False).apply(lambda x: x if len(
    x) == 1 else x.iloc[[-2]]).reset_index(level=0, drop=True)
assert expected.sort_index().equals(result)
Дубликаты Python Pandas Drop остаются предпоследними