python - 按组检查一个数据框中的日期是否位于另一个数据框中的两个日期之间

标签 python pandas date

我遇到以下问题。我有一个数据框,其中包含每个组的开始日期和结束日期。 每个组可能有多个开始和结束日期,如下所示:

group   start_date    end_date
 1      2020-01-03    2020-03-03
 1      2020-05-03    2020-06-03
 2      2020-02-03    2020-06-03

另一个数据框,每个日期、每个组一行,如下所示:

group   date
 1     2020-01-03
 1     2020-02-03
 1     2020-03-03
 1     2020-04-03
 1     2020-05-03
 1     2020-06-03
 2     2020-02-03
 3     2020-03-03
 4     2020-04-03
      .
      .

所以我想以有效的方式创建一个列 is_ Between ,最好避免循环,所以我得到以下数据帧

group   date          is_between
 1     2020-01-03        1
 1     2020-02-03        1
 1     2020-03-03        1
 1     2020-04-03        0
 1     2020-05-03        1
 1     2020-06-03        1
 2     2020-02-03        1
 3     2020-03-03        1
 4     2020-04-03        1
      .
      .

因此,当组的日​​期位于第一个数据帧中的日期之间时,它会得到 1。我猜 groupbywhere Between 和也许 map 的某种组合可能会做到这一点,但我'我没有找到正确的。有什么想法吗?

最佳答案

根据@YOBEN_S 和@Quang Hoang 的建议,做到了:

df = df.merge(dic_dates, how='left')
df['is_between'] = np.where(df.date.between(pd.to_datetime(df.start_date),
                                                                   pd.to_datetime(df.end_Date)),1, 0)
df = (df.sort_values(by=['group', 'date', 'is_between'])
            .drop_duplicates(subset=['group', 'date'], keep='last'))

关于python - 按组检查一个数据框中的日期是否位于另一个数据框中的两个日期之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61963233/

相关文章:

Python 默认字典给出重复键

python - 使用日期值设置 xticks 间隔

python - 长度必须匹配才能比较( Pandas 根据两个标准进行选择)

javascript - 如何在 Javascript 中设置日期格式?

java - 如何使 SimpleDateFormat.parse() 失败?

javascript - 验证下拉列表以根据所选选项获取正确的日期

python - BeautifulSoup 附加

python - 1300, "Invalid utf8mb4 character string: '\xE2\x96\x88\xE2\x96\x88

python - 了解 Pandas 中的 apply 和 groupby

python - 如何解压 df 中的列表并在该列表上使用加法而不进行循环