如何用Pandas高效实现df2与df1前3行区间的滚动比较(免迭代)
Pandas高效实现滑动区间判断
核心思路
通过Pandas的滚动窗口(rolling)功能批量计算前3行的区间边界,再用向量式比较完成判断,全程避免迭代,适配大数据量场景。
实现步骤
计算前3行的区间边界
对df1的Min列取滚动3行的最小值(即前3行的最小下限),对Max列取滚动3行的最大值(即前3行的最大上限),再通过shift(1)将结果对齐到当前行的判断位置,确保前3行返回NaN。代码:
# 计算滚动窗口统计值并对齐 rolling_bounds = df1.rolling(window=3).agg({'Min': 'min', 'Max': 'max'}).shift(1)合并数据并完成区间判断
将df2与滚动边界数据按索引合并,直接用向量式比较判断每个value是否落在对应区间内。代码:
# 合并数据并执行判断 result_df = df2.join(rolling_bounds) result_df['in_range'] = (result_df['value'] >= result_df['Min']) & (result_df['value'] <= result_df['Max']) # 提取最终结果 final_result = result_df['in_range']
结果验证
- 2022-01-04的
value=99:对应前3行区间是[95, 98],99超出上限→结果False - 2022-01-05的
value=96:对应前3行区间是[94, 97],96在区间内→结果True
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

