Два фрейма данных с MultiIndex в столбцах (формы разные).
df1_columns = pd.MultiIndex.from_tuples([("A0", "B0", "C0"), ("A1", "B1", "C1")])
df1 = pd.DataFrame([[1, 2], [10, 20]], columns=df1_columns)
df2_columns = pd.MultiIndex.from_tuples([("X0", "Y0"), ("X1", "Y1")])
df2 = pd.DataFrame([[1, 200], [10, 200]], columns=df2_columns)
Случай 1
pd.merge(df1, df2, left_on=[("A0", "B0","C0")], right_on=[("X0", "Y0")])
возвращает
(A0, B0, C0) (A1, B1, C1) (X0, Y0) (X1, Y1)
0 1 2 1 200
1 10 20 10 200
Все нормально. Столбцы сохранили свою структуру из обоих фреймов данных. Это кортежи, но их можно исправить (например, с помощью чего-то вроде this ).
Случай 2
pd.merge(df2, df1, left_on=[("X0", "Y0")], right_on=[("A0", "B0","C0")])
возвращает
X0 X1 A0 A1
Y0 Y1 B0 B1
0 1 200 1 2
1 10 200 10 20
Когда левый DataFrame является DataFrame с меньшим количеством уровней столбцов, результат слияния вызывает сомнения: более низкие уровни отбрасываются.
Это особенность Pandas, что форма результирующего столбца уровни должны быть такими же, как и для левого DataFrame, или это причина сообщить о проблеме?
Примечания:
- В обоих случаях предупреждение такое же
UserWarning: merging between different levels can give an unintended result ...
. - Проверено с помощью pandas 0.25.1 и 1.0.4.