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

pandas DataFrame使用多if条件计算最终得分结果不符如何解决

问题核心原因

你代码中所有使用== np.nan、!= np.nan的空值判断逻辑全部错误。NaN是特殊浮点类型,任何值与NaN做相等/不等比较都会返回False,哪怕np.nan == np.nan的结果也是False。因此只有两个分数都非空时你的条件能匹配成功,其余场景所有条件都不触发,函数无返回值,转成pandas列后就变为NaN,这就是第一、三行结果不符合预期的原因。

修正方案

方式1:修改你原有的apply逻辑

使用pandas内置的pd.isna()/pd.notna()做空值判断:

import numpy as np
import pandas as pd

df = pd.DataFrame({
            'score_1': [1.11, 2.22, np.nan, np.nan],
            'score_2': [np.nan, 3.33, 3.33, np.nan]
        })

def final_score(row):
    s1_valid = pd.notna(row['score_1'])
    s2_valid = pd.notna(row['score_2'])
    if s1_valid and s2_valid:
        return row['score_1'] * 0.2 + row['score_2'] * 0.8
    elif s1_valid:
        return row['score_1']
    elif s2_valid:
        return row['score_2']
    else:
        return np.nan

df['final_score'] = df.apply(final_score, axis=1)
print(df)

方式2:向量化实现(性能更高,推荐)

无需写循环和判断逻辑,直接利用fillna的特性实现规则:

# 先计算两个分数都有效时的加权结果
df['final_score'] = df['score_1'] * 0.2 + df['score_2'] * 0.8
# score_1为空时取score_2的值
df['final_score'] = df['final_score'].fillna(df['score_2'])
# score_2为空时取score_1的值
df['final_score'] = df['final_score'].fillna(df['score_1'])

两种方式输出都和你的预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:05