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

Python中关联DataFrame计算Score列的函数实现请求

实现DataFrame区间匹配求和的Score计算函数

需要为DF1新增Score列,计算逻辑为:

  • 对DF1每一行的Age、Income、Contract Length字段,分别在DF2中找到对应变量的LQ-UQ区间(字段值 >= LQ 且 <= UQ)
  • 取出每个字段匹配到的Score值,求和后作为该行的Score值

示例数据

import pandas as pd

DF1 = pd.DataFrame({
    'Age':[25, 54, 33],
    'Income' :[10203, 23822, 84823],
    'Contract Length':[18, 12, 36],
})

DF2 = pd.DataFrame({
    'variable':['Age', 'Age', 'Age', 'Age',
                'Income', 'Income', 'Income', 'Income',
                'Contract Length', 'Contract Length', 'Contract Length', 'Contract Length'],
    'LQ':[25, 32.25, 39.5, 46.75, 10203, 28858, 47513, 66168, 12, 18, 24, 30],
    'UQ':[32.25, 39.5, 46.75, 54, 28858, 47513, 66168, 84823, 18, 24, 30, 36],
    'Score':[5, 10, 15, 20, 10, 15, 20, 25, 15, 20, 25, 30]
})

实现函数

def calculate_score(df1, df2):
    # 初始化Score列为0
    df1['Score'] = 0
    
    # 遍历每个需要匹配的变量
    for var in ['Age', 'Income', 'Contract Length']:
        # 提取当前变量的区间规则
        var_rules = df2[df2['variable'] == var]
        
        # 对df1的当前字段值,匹配对应的Score
        def get_var_score(val):
            # 找到满足 LQ <= val <= UQ 的行
            match = var_rules[(var_rules['LQ'] <= val) & (val <= var_rules['UQ'])]
            # 返回对应的Score(假设每个值唯一匹配一个区间)
            return match['Score'].values[0]
        
        # 计算当前变量的得分并累加到总Score
        df1['Score'] += df1[var].apply(get_var_score)
    
    return df1

逻辑说明

  1. 函数接收两个DataFrame参数,先初始化Score列为0
  2. 逐个处理三个目标变量:从DF2中筛选出对应变量的所有区间规则
  3. 定义辅助函数get_var_score,输入字段值后找到匹配的区间,返回对应的Score值
  4. 使用apply方法为DF1的当前字段每行计算得分,累加到总Score中

测试结果

调用函数并查看结果:

result_df = calculate_score(DF1, DF2)
print(result_df)

输出:

Age  Income  Contract Length  Score
0   25   10203               18     30
1   54   23822               12     45
2   33   84823               36     65

验证:

  • 第1行:Age=25得5,Income=10203得10,Contract Length=18得15,总和30,符合要求
  • 第2行:Age=54匹配区间46.75-54得20,Income=23822匹配10203-28858得10,Contract Length=12匹配12-18得15,总和45
  • 第3行:Age=33匹配32.25-39.5得10,Income=84823匹配66168-84823得25,Contract Length=36匹配30-36得30,总和65

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:33:31