Слияние снижает более низкие уровни в столбцах результатов, когда левый DF имеет меньше уровней столбца MultiIndex, чем правый DF - PullRequest
0 голосов
/ 20 июня 2020

Два фрейма данных с 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, или это причина сообщить о проблеме?

Примечания:

  1. В обоих случаях предупреждение такое же UserWarning: merging between different levels can give an unintended result ....
  2. Проверено с помощью pandas 0.25.1 и 1.0.4.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...