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

如何从另一DataFrame返回最大值?附代码及报错问题

问题:从多代码字符串匹配参考表并提取最大值

场景说明

有两个DataFrame:

  • df1:参考表,存储单个代码与对应数值的映射
  • df2:大型数据集片段,其中一列包含以逗号分隔的多代码字符串,同时存在空白值、Not Applicable这类无效值

需求:拆分df2中的每个代码字符串,匹配df1中的对应数值,在df2新增一列返回该字符串所有有效代码对应数值的最大值。

示例数据:

import pandas as pd

df1 = [['H302',18],
       ['H312',17],
       ['H315',16],
       ['H316',15],
       ['H319',14],
       ['H320',13],
       ['H332',12],
       ['H304',11]]
df1 = pd.DataFrame(df1, columns=['Code', 'Value'])

df2 = [['H302,H304'],
       ['H332,H319,H312,H320,H316,H315,H302,H304'],
       ['H315,H312,H316'],
       ['H320,H332,H316,H315,H304,H302,H312'],
       ['H315,H319,H312,H316,H332'],
       ['H312'],
       ['Not Applicable'],
       ['']]
df2 = pd.DataFrame(df2, columns=['Code'])

原代码的问题

原代码使用多层嵌套循环处理,存在以下问题:

  1. 性能极差:三层循环遍历,面对大型数据集时运行效率极低
  2. 未处理无效值:当遇到Not Applicable或空字符串时,拆分后仍保留字符串类型,执行max()时会同时存在数值和字符串,触发报错:无法在numpy数组实例和字符串之间进行小于比较(原报错:'<' not supported between instances of 'numpy.ndarray' and 'str')
  3. 写法不规范:手动维护列表append的方式不符合pandas向量化操作的最佳实践

优化实现方案

利用pandas的向量化操作+字典映射,高效解决问题:

# 将df1转换为字典,实现O(1)快速查找
code_value_map = df1.set_index('Code')['Value'].to_dict()

def get_max_value(code_str):
    # 处理无效值
    if pd.isna(code_str) or code_str.strip() == '' or code_str == 'Not Applicable':
        return pd.NA  # 或者返回0/其他默认值,根据需求调整
    # 拆分代码字符串
    codes = code_str.split(',')
    # 过滤空代码(防止拆分后出现空白项),并映射获取数值
    values = [code_value_map.get(code.strip(), pd.NA) for code in codes]
    # 过滤无效的映射值,取最大值
    valid_values = [v for v in values if pd.notna(v)]
    return max(valid_values) if valid_values else pd.NA

# 应用到df2生成新列
df2['Max Value'] = df2['Code'].apply(get_max_value)

代码说明:

  • 字典映射:将df1转为字典后,代码到数值的查找时间复杂度从O(n)降到O(1),大幅提升效率
  • 无效值处理:提前判断并返回空值(或自定义默认值),避免后续类型冲突
  • 过滤校验:拆分后过滤空白代码、无效映射值,确保max()仅针对有效数值计算

运行后df2结果:

CodeMax Value
H302,H30418
H332,H319,H312,H320,H316,H315,H302,H30418
H315,H312,H31617
H320,H332,H316,H315,H304,H302,H31218
H315,H319,H312,H316,H33217
H31217
Not Applicable

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:50:25