Сравнить две даты в фрейме данных pandas с текущей датой и создать новый столбец?

#python #pandas #dataframe #datetime

#python #pandas #фрейм данных #дата и время

Вопрос:

У меня есть фрейм данных (df), как показано ниже:

 from datetime import date
Today = str(date.today())
df['Today_Date'] = Today

Status_Date  Today_Date  Planned_Date   
 25-11-2020  27-11-2020  25-11-2020      
 28-11-2020  27-11-2020  29-11-2020      
 26-11-2020  27-11-2020  29-11-2020      
 27-11-2020  27-11-2020  27-11-2020      
 30-11-2020  27-11-2020  29-11-2020      
 23-11-2020  27-11-2020  24-11-2020   
 

Мне нужно сравнить Status_date и Planned_Date с Today_date, которые в идеале являются текущей датой, и создать новый столбец, как показано ниже:

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

 Status_Date  Today_Date  Planned_Date   Status_Color
 25-11-2020  27-11-2020  25-11-2020      Red
 28-11-2020  27-11-2020  29-11-2020      Green
 26-11-2020  27-11-2020  29-11-2020      Amber
 27-11-2020  27-11-2020  27-11-2020      Amber
 30-11-2020  27-11-2020  29-11-2020      Green
 23-11-2020  27-11-2020  24-11-2020      Red
 

Как это можно сделать на python?

Комментарии:

1. Какова логика заполнения значений Red, Green, Amber ?

2. @MayankPorwal, 1. Если Status Date и Planned_Date меньше, чем ` Today_Date`, тогда красный. 2. Если Status Date и Planned_Date больше, чем `Today_Date`, тогда зеленый. 3. Еще янтарный

Ответ №1:

Сначала преобразуйте все столбцы даты в pandas datetime с помощью pd.to_datetime , затем используйте numpy.select для создания нового столбца:

 In [3957]: df.Status_Date = pd.to_datetime(df.Status_Date)    
In [3958]: df.Today_Date = pd.to_datetime(df.Today_Date)    
In [3959]: df.Planned_Date = pd.to_datetime(df.Planned_Date)

In [3961]: conds = [((df.Today_Date > df.Status_Date) amp; (df.Today_Date > df.Planned_Date)), ((df.Today_Date < df.Status_Date) amp; (df.Today_Date < df.Planned_Date))]    
In [3962]: choices = ['Red', 'Green']

In [3965]: df['Status_Color'] = np.select(conds, choices, default='Amber')

In [3966]: df
Out[3966]: 
  Status_Date Today_Date Planned_Date Status_Color
0  2020-11-25 2020-11-27   2020-11-25          Red
1  2020-11-28 2020-11-27   2020-11-29        Green
2  2020-11-26 2020-11-27   2020-11-29        Amber
3  2020-11-27 2020-11-27   2020-11-27        Amber
4  2020-11-30 2020-11-27   2020-11-29        Green
5  2020-11-23 2020-11-27   2020-11-24          Red