首页 > 解决方案 > Pandas:检查一个日期列是否位于两个日期列之间,如果 true 填充输出

问题描述

我有一个带有 3 个日期字段的 DataFrame purchaseDatereleaseDateceaseDate。数据框示例如下所示。

Product purchaseDate    releaseDate ceaseDate
ABC    20/12/2020       01/01/2021  02/01/2022
ZXC    15/01/2021       05/01/2021  02/01/2022
QWE    29/03/2021       06/01/2021  02/01/2022
ASD    13/04/2021       07/01/2021  02/01/2022

如果purchaseDate介于releaseDate和 之间,则应将ceaseDate输出填充到新列中。如果它在这两个日期之外,它应该显示为。所需的输出如下所示。ActiveStatuspurchaseDateInactive

Product purchaseDate    releaseDate ceaseDate   status
ABC     20/12/2020      01/01/2021  02/01/2022  Inactive
ZXC     04/01/2021      05/01/2021  02/01/2022  Inactive
QWE     29/03/2021      06/01/2021  02/01/2022  Active
ASD     13/04/2021      07/01/2021  02/01/2022  Active

任何可以提供的帮助将不胜感激。

标签: pythonpandas

解决方案


将日期列转换为datetime类型和使用between函数

date_columns = df.filter(regex='Date').columns
df[date_columns] = df[date_columns].apply(pd.to_datetime, format='%d/%m/%Y')

用于np.where根据条件插入值

in_between = df.purchaseDate.between(df.releaseDate, df.ceaseDate)
df['status'] = np.where(in_between, 'Active', 'Inactive')
print(df)

输出

  Product purchaseDate releaseDate  ceaseDate    status
0     ABC   2020-12-20  2021-01-01 2022-01-02  Inactive
1     ZXC   2021-01-15  2021-01-05 2022-01-02    Active
2     QWE   2021-03-29  2021-01-06 2022-01-02    Active
3     ASD   2021-04-13  2021-01-07 2022-01-02    Active

注意:不要忘记import numpy as np


推荐阅读