使用IntervalIndex
,这是Pandas 0.20.0中的新功能。不过,这似乎仍处于实验阶段,因此其他解决方案可能更可靠。
# Get the 'id' column indexed by the 'start'/'end' intervals.
s = pd.Series(df_b['id'].values, pd.IntervalIndex.from_arrays(df_b['start'], df_b['end']))
# Map based on the date of df_a.
df_a['id'] = df_a['date'].map(s)
结果输出:
date values id
0 2017-05-16 x 34
1 2017-04-12 Y 32
另外,如果您不介意更改的索引df_b
,则可以直接将IntervalIndex
其转换为on:
# Create an IntervalIndex on df_b.
df_b = df_b.set_index(['start', 'end'])
df_b.index = pd.IntervalIndex.from_tuples(df_b.index)
# Map based on the date of df_a.
df_a['id'] = df_a['date'].map(df_b['id'])