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

Python中忽略NaN值将SCORE列与多个S开头列相加的高效实现

解决方案

直接使用pandas原生向量化运算即可实现需求,无Python层面的循环逻辑,完全适配大数据量场景:

核心逻辑

pandas的add方法自带空值兼容特性:非NaN值会正常执行加法,NaN值参与运算后仍保留为NaN,配合DataFrame的广播机制可以直接逐行完成所有S列和SCORE列的批量相加。

完整实现代码

import pandas as pd
import numpy as np

# 示例数据构造
data_ex = [
    [1,1,38147,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
    [2,1,567,38147, np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
    [3,1,0,567,38147, np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
    [4,1,0,0,567,38147, np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
    [5,1,0,0,0,567,38147, np.NaN,np.NaN,np.NaN,np.NaN],
    [6,1,0,0,0,0,567,38147, np.NaN,np.NaN,np.NaN],
    [7,1,0,0,0,0,0,567,38147, np.NaN,np.NaN],
    [8,1,586,0,0,0,0,0,567,38147, np.NaN],
    [1,2,3099,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
    [2,2,30460,3099,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
    [3,2,2372,30460,3099,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],
    [4,2,0,2372,30460,3099,np.NaN,np.NaN,np.NaN,np.NaN,np.NaN ],
    [5,2,0,0,2372,30460,3099,np.NaN,np.NaN,np.NaN,np.NaN,],
    [6,2,0,0,0,2372,30460,3099,np.NaN,np.NaN,np.NaN],
    [7,2,0,0,0,0,2372,30460,3099,np.NaN,np.NaN],
    [8,2,267,0,0,0,0,2372,30460,3099,np.NaN],
]
test_data = pd.DataFrame(data_ex, columns = ['FIRST', 'SECOND', 'SCORE', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6', 'S7', 'S8'])

repeat = 8
# 生成需要操作的S列列表
s_cols = [f'S{i}' for i in range(1, repeat+1)]
# 向量化执行加法
test_data[s_cols] = test_data[s_cols].add(test_data['SCORE'], axis=0)

# 输出验证
print(test_data)

性能说明

该实现完全基于pandas底层C语言实现的向量化运算,没有Python层面的遍历逻辑,处理百万级以上行数的数据集时性能是普通for循环的百倍以上,完全满足大数据量场景需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:00:00