You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从含非整数月份的DataFrame按临近规则提取整数月SurvProb值

实现方案

基于pandas的merge_asof方法可以快速实现该匹配逻辑,该方法原生支持时序类场景下「找小于等于目标值的最近记录」的匹配规则,完全适配需求,步骤如下:

  • 预处理原数据,保证Months列按升序排列(merge_asof要求连接键必须有序)
  • 生成24.0~48.0步长为1的目标整数月份序列
  • 执行asof左连接,自动匹配每个目标月份对应的SurvProb值

可直接运行的代码示例

import pandas as pd
import numpy as np

# --------------- 替换为你自己的dataframe即可 ---------------
# 样例数据构造
df = pd.DataFrame({
    'Months': [23.9, 24.3, 26.5, 27.0, 28.1, 28.9, 30.3, 67],
    'SurvProb': [100, 99, 98, 98, 97, 94, 90, 40]
})
# -----------------------------------------------------------

# 原数据按月份升序排序
df = df.sort_values('Months').reset_index(drop=True)

# 生成目标查询月份:24到48的整数月,转成float和原列类型对齐
target_months = pd.DataFrame({
    'Months': np.arange(24, 49, 1, dtype=float)
})

# 执行asof匹配,backward方向即取小于等于目标月份的最近一条记录
result = pd.merge_asof(
    target_months,
    df,
    on='Months',
    direction='backward',
    allow_exact_matches=True
)

# 无索引打印,输出格式和预期一致
print(result.to_string(index=False))

匹配效果验证

用给出的样例数据运行后,前几行输出完全符合规则要求:

Months  SurvProb
   24.0       100
   25.0        99
   26.0        99
   27.0        98
   28.0        98
   29.0        94
   30.0        94

注意事项

  • 如果原数据中不存在小于24的月份记录,24月的匹配结果会是空值,使用前可以先通过df['Months'].min() <=24做边界校验
  • 该方法运行效率远高于循环逐行查找,十万级以上数据量也能秒级返回结果

内容的提问来源于stack exchange,提问作者Lei Deng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:30:54