如何根据日期和月份范围合并数据框?

How can i merge dataframes based on a day and month range?

我有 table A 和 table B 如下:

Table一个

     from      to   comercial_event
0   01/07   02/07   January sales
1   02/12   02/12   Chinese new year
2   02/13   02/18   Carnival
3   02/07   02/14   Valentine's Day
4   03/12   03/19   Father's day

TableB

                        dates   comercial_event     month_day
0   2017-01-14 23:01:10+00:00           unknown         01/14
1   2017-08-29 23:01:10+00:00           unknown         08/29
2   2017-02-13 23:01:10+00:00           unknown         02/13
3   2017-08-31 23:01:10+00:00           unknown         08/31
4   2017-03-15 23:01:10+00:00           unknown         03/15

我想做的是使用 table B 中的 month_day 列作为参考合并 2 table。 month_day 列仅表示月份和日期(没有年份)。如果此列的值介于 table A 的 fromto 列的值之间,则应更新 table B 的 comercial_event 列Table A 的 comercial_event 列的值,用于该月和日范围。输出将是这样的:

                            dates   comercial_event     month_day
    0   2017-01-14 23:01:10+00:00   January Sales           01/14
    1   2017-08-29 23:01:10+00:00           unknown         08/29
    2   2017-02-13 23:01:10+00:00   Valentine's Day         02/13
    3   2017-08-31 23:01:10+00:00           unknown         08/31
    4   2017-03-15 23:01:10+00:00   Father's day            03/15

如果 month_day 值与多个商业事件同时发生,则 comercial_event 列值应为“多个”。

我看过 question and this 个问题,但其中 none 个似乎真正解决了这个问题。

我正在使用 python 2.7pandas 0.24

我该如何解决这个问题?

让我们做

idx = pd.IntervalIndex.from_arrays(pd.to_datetime(df1['from'], format='%m/%d'),
           pd.to_datetime(df1['to'],format='%m/%d'), 'both')
s = pd.Series(df1.comercial_event.tolist(), index=idx)
look = pd.to_datetime(df2['month_day'], format='%m/%d')

l = []
for x in look:

    try:
        l.append(s.loc[[x]].tolist())
    except:
        l.append(np.nan)
df2['out'] = l
df2
Out[117]: 
        dates comercial_event month_day                         out
0  2017-01-14         unknown     01/14              [Januarysales]
1  2017-08-29         unknown     08/29                         NaN
2  2017-02-13         unknown     02/13  [Carnival, Valentine'sDay]
3  2017-08-31         unknown     08/31                         NaN
4  2017-03-15         unknown     03/15               [Father'sday]