我遇到以下问题。我有一个数据框,其中包含每个组的开始日期和结束日期。 每个组可能有多个开始和结束日期,如下所示:
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。我猜 groupby
、where
、 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/