【发布时间】:2015-08-09 23:14:06
【问题描述】:
我想根据 df2 行是否在 df1 行之后的 3-6 个月日期范围内合并两个数据框 df1 和 df2。例如:
df1(对于我有季度数据的每家公司):
company DATADATE
0 012345 2005-06-30
1 012345 2005-09-30
2 012345 2005-12-31
3 012345 2006-03-31
4 123456 2005-01-31
5 123456 2005-03-31
6 123456 2005-06-30
7 123456 2005-09-30
df2(对于每家公司,我都有可以在任何一天发生的活动日期):
company EventDate
0 012345 2005-07-28 <-- won't get merged b/c not within date range
1 012345 2005-10-12
2 123456 2005-05-15
3 123456 2005-05-17
4 123456 2005-05-25
5 123456 2005-05-30
6 123456 2005-08-08
7 123456 2005-11-29
8 abcxyz 2005-12-31 <-- won't be merged because company not in df1
理想的合并 df -- df2 中 EventDates 的行在 df1 行中的 DATADATE 之后 3-6 个月(即 1 个季度)将被合并:
company DATADATE EventDate
0 012345 2005-06-30 2005-10-12
1 012345 2005-09-30 NaN <-- nan because no EventDates fell in this range
2 012345 2005-12-31 NaN
3 012345 2006-03-31 NaN
4 123456 2005-01-31 2005-05-15
5 123456 2005-01-31 2005-05-17
5 123456 2005-01-31 2005-05-25
5 123456 2005-01-31 2005-05-30
6 123456 2005-03-31 2005-08-08
7 123456 2005-06-30 2005-11-19
8 123456 2005-09-30 NaN
我正在尝试通过将 start_time 和 end_time 列添加到 df1 来应用这个相关主题 [Merge pandas DataFrames based on irregular time intervals],表示 DATADATE 之后的 3 个月 (start_time) 到 6 个月 (end_time),然后使用 np.searchsorted(),但是这种情况有点棘手,因为我想逐个公司合并。
【问题讨论】:
标签: date join pandas merge offset