使用pandas为指定日期匹配预设区间的对应Period编号
实现方案
推荐使用pandas.IntervalIndex实现高效区间匹配,完全满足不修改df_2、不直接合并两个表的要求,代码简洁且适配你的场景规模。
核心实现代码
import pandas as pd # 1. 基于df2的起止日期构建闭区间索引,绑定对应的Period值 # 区间指定为closed='both',适配日期包含首尾边界的业务需求 period_intervals = pd.IntervalIndex.from_arrays(df_2['From'], df_2['To'], closed='both') period_mapper = pd.Series(df_2['Period'].values, index=period_intervals) # 2. 给df1的日期匹配对应Period df_1['Period'] = df_1['Date'].map(period_mapper) # 可选:如果存在不在任何区间的日期,可补充默认值,例如填充为0 # df_1['Period'] = df_1['Period'].fillna(0)
方案说明
- 完全符合约束:全程不会修改
df_2的原始数据,也不需要执行两个表的合并操作 - 性能足够:针对数百条df1数据、50个区间的场景,匹配耗时可忽略,就算df1扩容到十万级也能快速完成
- 兼容扩展:如果业务中存在区间重叠的情况,只需提前按业务优先级对
df_2排序后再构建索引即可,无需修改核心逻辑;如果需要优先匹配后序的重叠区间,构建索引前把df2倒序排列即可。
输出结果
运行代码后得到的df_1和预期结果完全一致:
| Date | Period |
|---|---|
| 1995-03-12 | 44 |
| 1980-11-30 | 41 |
| 1972-03-05 | 39 |
| 1978-12-03 | 40 |
内容的提问来源于stack exchange,提问作者johnjohn
相关产品推荐
相关产品推荐

