【问题标题】:Compare two dates in pandas dataframe with current date and create new column?将熊猫数据框中的两个日期与当前日期进行比较并创建新列?
【发布时间】:2020-11-27 13:05:58
【问题描述】:

我有如下图的dataframe(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 中如何实现?

【问题讨论】:

  • Red, Green, Amber填值的逻辑是什么?
  • @MayankPorwal,1.如果Status DatePlanned_Date 小于`Today_Date`,则红色。2.如果Status DatePlanned_Date 大于`Today_Date`,则绿色。 3.其他琥珀

标签: python pandas dataframe datetime


【解决方案1】:

首先使用pd.to_datetime 将所有日期列转换为pandas 日期时间,然后使用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) & (df.Today_Date > df.Planned_Date)), ((df.Today_Date < df.Status_Date) & (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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-02
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多