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

如何使用Pandas匹配数值区间从DataFrame提取对应交叉值

pandas区间匹配取值实现方案

pandas没有专门针对字符串格式存储的行列区间做双向匹配的内置方法,我们可以通过解析区间字符串为数值上下限,再逐维度匹配的方式实现需求,具体实现如下:


核心实现逻辑

  • 首先解析行维度Score列的区间字符串,拆分出每个区间的数值上下限,匹配传入分数所属的行
  • 再解析列维度(除Score外的所有列)的列名字符串,去掉百分号后拆分区间上下限,匹配传入百分比所属的列
  • 直接取DataFrame中行、列交叉位置的数值返回即可

完整代码

import pandas as pd

# 初始化示例DataFrame
df = pd.DataFrame({
    'Score': {0: '100-199', 1: '200-300', 2: '400-500', 3: '500-700'},
    '50-60%': {0: 0.2, 1: 0.3, 2: 0.4, 3: 0.5},
    '60-70%': {0: 5.6, 1: 6.4, 2: 7.2, 3: 8.4},
    '70-80%': {0: 6.8, 1: 7.9, 2: 8.6, 3: 9.5}
})

def get_value(score_val, pct_val):
    # 匹配分数对应的行索引
    target_row = None
    for idx, range_str in df['Score'].items():
        low, high = map(int, range_str.split('-'))
        if low <= score_val <= high:
            target_row = idx
            break

    # 匹配百分比对应的列名
    target_col = None
    for col_name in df.columns.drop('Score'):
        range_part = col_name.rstrip('%')
        low, high = map(int, range_part.split('-'))
        if low <= pct_val <= high:
            target_col = col_name
            break

    if target_row is None or target_col is None:
        raise ValueError("传入参数不在已定义的区间范围内")
    
    return df.loc[target_row, target_col]

效果验证

  • 调用get_value(124, 70),返回值为6.8,符合预期
  • 其他调用示例:
    • get_value(260, 62) 返回6.4
    • get_value(600, 75) 返回9.5

若使用场景下调用频率很高,可以在函数外提前预解析所有行、列的区间上下限存为映射表,避免每次调用重复遍历解析,进一步提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:54:12