TL; DR
Это совершенно разные операции, и я бы никогда не ожидал, что они дадут одинаковые результаты.
pandas.DataFrame.equals
Вернет логическое значениезначение в зависимости от того, определяет ли Pandas, что сравниваемые кадры данных являются «одинаковыми». Это означает, что индекс одного «совпадает» с индексом другого, столбцы одного «совпадают» со столбцами другого, а данные одного «совпадают» с даннымидругое.
См. документы
Это НЕ то же самое, что pandas.DataFrame.eq
, который вернет фрейм данных булевых значений.
Настройка
Рассмотрим эти три кадра данных
df0 = pd.DataFrame([[0, 1], [2, 3]], [0, 1], ['A', 'B'])
df1 = pd.DataFrame([[1, 0], [3, 2]], [0, 1], ['B', 'A'])
df2 = pd.DataFrame([[0, 1], [2, 3]], ['foo', 'bar'], ['A', 'B'])
df0 df1 df2
A B B A A B
0 0 1 0 1 0 foo 0 1
1 2 3 1 3 2 bar 2 3
Если мы проверили, было ли df1
от equals
до df0
, мы получили
df0.equals(df1)
False
Даже если все элементы одинаковы
df0.eq(df1).all().all()
True
И это потому, что столбцы не выровнены. Если я сортирую столбцы, то ...
df0.equals(df1.sort_index(axis=1))
True
pandas.DataFrame.drop_duplicates
Сравнивает значения в строках и не заботится об индексе.
Итак, оба из них дают одинаково выглядящие результаты
df0.append(df2).drop_duplicates()
и
df0.append(df1, sort=True).drop_duplicates()
A B
0 0 1
1 2 3
Когда я append
(или pandas.concat
), Панды выровняют столбцы и добавят добавленныефрейм данных как новые строки. Тогда drop_duplicates
делает свое дело. Но именно внутреннее выравнивание столбцов делает то, что я делал выше с sort_index
и axis=1
.