Проблема в том, что индексы не совпадают ... В качестве упрощенного примера (обратите внимание, что если вы передаете пустой элемент (''
) в df1
вместо, скажем, элемента [4]
, который он производит тот же результат):
In [21]: df1 = pd.DataFrame([[1], [4]])
In [22]: df1
Out[22]:
0
0 1
1 4
Используя ту же структуру DF, но изменяя индекс ...
In [23]: df2 = pd.DataFrame([[3], [2]], index=[1, 0])
In [24]: df2
Out[24]:
0
1 3
0 2
Теперь для сравнения ...
In [25]: df1[0] == df2[0]
ValueError: Can only compare identically-labeled Series objects
Чтобы доказать проблему с индексом - переделайте df2
без обратного индекса ...
In [26]: df3 = pd.DataFrame([[3], [2]])
In [27]: df3
Out[27]:
0
0 3
1 2
И полученное сравнение:
In [28]: df1[0] == df3[0]
Out[28]:
0 False
1 False
Name: 0, dtype: bool
Исправление
Вам нужно будет переиндексировать один из df
- вот так (это использует «сортируемый» индекс - так сложнее для более сложного многоиндексного):
In [44]: df2.sort_index(inplace=True)
In [45]: df1[0] == df2[0]
Out[45]:
0 False
1 False
Name: 0, dtype: bool
Если вы можете предоставить данные CSV, мы могли бы попробовать их с мультииндексом ...
Multi-Index
Метод .sort_index()
имеет атрибут level=
, который можно передать. Вы можете передать int или имя уровня или список целых чисел или список имен уровней . Таким образом, вы можете сделать что-то вроде:
df2.sort_index(level='level_name', inplace=True)
# as a list of levels... it will all depend on your original df index
levels = ['level_name1', 'level_name2]
df2.sort_index(level=levels, inplace=True)