Логическое сравнение со столбцом даты, не работающим в Pandas кадре данных - PullRequest
5 голосов
/ 16 января 2020

У меня есть такой фрейм данных:

Milestone   Initial_Date    Next_Date   Buffer  Buffer1
-------------------------------------------------------
M0          11/1/2020       13/1/2020   6       1
M1          13/1/2020       15/1/2020   3       1
M0          24/12/2019      25/12/2019  4       2
M1          16/12/2019      21/12/2019  9       2
M0          8/1/2020        14/1/2020   10      1
M2          6/1/2020        9/1/2020    5       2
M3         18/1/2020       21/1/2020    3       4

, и я применяю ниже logi c к фрейму данных

CASE
   WHEN milestone = 'M0' THEN Intial_date + Buffer
   WHEN milestone = 'M1' THEN Next_datee + Buffer
   WHEN milestone >= 'M2' THEN Intial_date + Buffer1
   ELSE NULL
END AS Result

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

Result
------------
17/1/2020
18/1/2020
28/12/2019
30/12/2019
18/1/2020
8/1/2020
22/1/2020

Мой код:

# типами полей даты являются datetime64 [нс], а буфер имеет тип float64

   data['Milestone'] = pd.Categorical(data['Milestone'],categories=['00','M0','M1','M2','M3','M4','M5','M6','M7'],ordered=True)
    buffer = pd.to_timedelta(final_result['Buffer'], unit='d')
    buffer1 = pd.to_timedelta(final_result['Buffer1'], unit='d')
    data['Result'] =np.select([data['Milestone']=='M0',data['Milestone']=='M1',
                                            data[MILESTONE']>='M2']
                                ,[data['Initial_Date']+Buffer,data['Next_Date']+Buffer,
                                  data['Initial_Date']+Buffer1)

Я получаю ошибку

TypeError: Неверный тип продвижения

из приведенного выше кода. Можете ли вы помочь мне исправить это?

1 Ответ

2 голосов
/ 16 января 2020

Сначала необходимо добавить параметр по умолчанию к None или NaT, а затем преобразовать выходные данные в даты:

data['Result'] =pd.to_datetime(np.select([data['Milestone']=='M0',
                               data['Milestone']=='M1',
                               data['Milestone']>='M2'],
                              [data['Initial_Date']+buffer,
                               data['Next_Date']+buffer,
                               data['Initial_Date']+buffer1],
                               default=None))

print (data)
  Milestone Initial_Date  Next_Date  Buffer  Buffer1     Result
0        M0   2020-01-11 2020-01-13       6        1 2020-01-17
1        M1   2020-01-13 2020-01-15       3        1 2020-01-18
2        M0   2019-12-24 2019-12-25       4        2 2019-12-28
3        M1   2019-12-16 2019-12-21       9        2 2019-12-30
4        M0   2020-01-08 2020-01-14      10        1 2020-01-18
5        M2   2020-01-06 2020-01-09       5        2 2020-01-08
6        M3   2020-01-18 2020-01-21       3        4 2020-01-22
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...