Объедините два кадра данных, но игнорируйте строки с помощью NaT

#python #pandas #dataframe #numpy #merge

Вопрос:

У меня есть два кадра данных, которые я хотел бы объединить в » ID » и «updated_date». Единственное различие между ними заключается в том, что столбец «other_date» в df1 содержит пару NaT, а df2 содержит столбец «тип».

Идентификатор, подобный результирующему df, чтобы иметь NaN для всех объединяющихся строк, в которых изначально был NaT (строка № 3)

     ID   |  updated_date |  other_date | 
0   11   |   2019-04-03  |  2019-04-09 | 
1   11   |   2019-05-02  |  2019-05-14 |
2   11   |   2019-05-20  |  2019-06-05 | 
3   11   |   2019-03-03  |      NaT    |

    ID   |  updated_date |  other_date |   type   |
0   11   |   2019-04-03  |  2019-04-09 |    C     |
1   11   |   2019-05-02  |  2019-05-14 |    C     |
2   11   |   2019-05-20  |  2019-06-05 |    D     |
3   11   |   2019-03-03  |  2019-03-04 |    C     |
 

Желаемый результат:

     ID   |  updated_date |  other_date |   type   |
0   11   |   2019-04-03  |  2019-04-09 |    C     |
1   11   |   2019-05-02  |  2019-05-14 |    C     |
2   11   |   2019-05-20  |  2019-06-05 |    D     |
3   11   |   2019-03-03  |      NaT    |   NaN    |
 

Ответ №1:

Может быть, попробовать левое соединение с тремя столбцами ID, updated_date и other_date?

 df1.merge(df2, how = "left", on = ["ID", "updated_date", "other_date"])
 

Вывод

ID дата обновления другая дата Тип
0 11 2019-04-03 2019-04-09 C
1 11 2019-05-02 2019-05-14 C
2 11 2019-05-20 2019-06-05 D
3 11 2019-03-03 натуральный NaN

Ответ №2:

Функция использования include(column) и добавления это поможет вам сделать список похожим, а затем использовать if(condition ) его в последней ячейке для печати NaN .