#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