Как объединить два DataFrames, которые имеют разную длину и индекс одного является подмножеством другого, но их типы данных различны? - PullRequest
0 голосов
/ 06 октября 2019

Мне нужно объединить эти два DataFrames.

+-------------------------------------+--+
|                df1:                 |  |
+-------------------------------------+--+
| Date           Temperature     Load |  |
| 01-01-2019      25              400 |  |
| 02-01-2019      32              487 |  |
| 03-01-2019      35              501 |  |
| 04-01-2019      28              457 |  |
| '               '               '   |  |
| '               '               '   |  |
| '               '               '   |  |
| 31-12-2019      22              385 |  |
+-------------------------------------+--+
+----------------------------------+
|               df2:               |
+----------------------------------+
| Date          Holiday            |
| 02-03-2019    Mahashivratri      |
| 14-04-2019    Good Friday        |
| 18-09-2019    Ganesh Chaturthi   |
| '               '                |
| '               '                |
| 25-12-2019    Christmas          |
+----------------------------------+    

Я попробовал метод слияния.

final = df1.merge(df2, on='Date', how='left')

Я также попробовал метод объединения аналогично.

final = df1.join(df2, on='Date', how='left')

В обоих случаях столбец 'Holiday' добавлялся к df1, но все его значения были NaN.

+-------------------------------------------------+
|                      final:                       |
+-------------------------------------------------+
| Date           Temperature     Load     Holiday |
| 01-01-2019      25              400     NaN     |
| 02-01-2019      32              487     Nan     |
| '               '               '       '       |
| '               '               '       '       |
| 02-03-2019      33              510     NaN     |
| '               '               '       '       |
| '               '               '       '       |
| 31-12-2019      22              385     NaN     |
+-------------------------------------------------+

Чего я хотел добиться, так это:

+-------------------------------------------------------+
|                        final:                         |
+-------------------------------------------------------+
| Date           Temperature     Load     Holiday       |
| 01-01-2019      25              400     NaN           |
| 02-01-2019      32              487     Nan           |
| '               '               '       '             |
| '               '               '       '             |
| 02-03-2019      33              510     Mahashivratri |
| '               '               '       '             |
| '               '               '       '             |
| 31-12-2019      22              385     NaN           |
+-------------------------------------------------------+

1 Ответ

1 голос
/ 06 октября 2019

Ваша команда merge правильная и отлично работает:

df1 = pd.DataFrame({'Date': ['01-01-2019', '02-03-2019'], 'Temperature': [25,32], 'Load': [400, 501]})
df2 = pd.DataFrame({'Date': ['02-03-2019', '14-04-2019'], 'Holiday': ['Mahashivratri', 'Good Friday']})
df1.merge(df2, on='Date', how='left')

Она дает желаемый результат:

         Date  Temperature  Load        Holiday
0  01-01-2019           25   400            NaN
1  02-03-2019           32   501  Mahashivratri

Возможно, проблема связана с dtype вашего Dateколонка. Вы не показали нам, что это такое, но вам нужно посмотреть, потому что все остальное правильно.

В следующий раз, пожалуйста, опубликуйте автономный работающий пример программы, как я делал выше. Если бы вы сделали это здесь, вы, вероятно, решили бы свою проблему самостоятельно, потому что ваши данные на самом деле не такие, как вы думаете. Бьюсь об заклад, один из ваших столбцов Дата имеет datetime dtype и один имеет object dtype.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...