【发布时间】:2020-05-22 20:19:53
【问题描述】:
我有以下问题。我有一个数据框,其中包含每个组的开始日期和结束日期。 每个组可能有多个开始和结束日期,如下所示:
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 的某种组合可能会做到这一点,但我没有找到正确的组合。有什么想法吗?
【问题讨论】:
-
你的数据框有多少行?
-
合并做条件?
-
第一个大约70-80(每天更新),第二个,几千。这必须在 512mb RAM 虚拟机上运行,以及许多其他进程,因此效率非常重要
-
Merge 会为获得多个开始和结束日期的组带来重复项,这意味着必须按组和
is_between排序,然后是 drop_duplicates,这似乎不太有效,但是它会起作用,而且比我目前得到的要好。 -
对于
80 x 10k数据,合并还不错。而且速度很快。