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

如何基于Pandas DataFrame某列值执行条件计算?

问题描述

我有如下DataFrame:

count  prep  result
     0      10     100
    10      100    100

需要根据以下规则创建新列evaluated:

if df['count']==0: 
    df['evaluated'] = df['result'] / df['prep']
else:
    df['evaluated'] = df['result'] / df['count']

预期结果:

count  prep  result   evaluated
     0      10     100      10
    100     10     100      1

我的真实DataFrame包含3万行数据,请问最优实现方式是什么?

最优实现方案

对于3万行的DataFrame,矢量化操作是最高效的选择——完全避免逐行循环,利用Pandas基于NumPy的底层优化大幅提升性能。以下是两种推荐的实现方式:

方法1:使用numpy.where

代码简洁,性能最优,一行完成条件赋值:

import numpy as np
import pandas as pd

df['evaluated'] = np.where(df['count'] == 0, 
                           df['result'] / df['prep'], 
                           df['result'] / df['count'])

方法2:使用Pandasloc布尔索引

逻辑清晰,先批量处理默认情况,再替换特殊值:

# 先处理count≠0的情况
df['evaluated'] = df['result'] / df['count']
# 单独替换count=0的行
df.loc[df['count'] == 0, 'evaluated'] = df['result'] / df['prep']

性能说明

这两种方法的时间复杂度均为O(n),远优于逐行处理的df.apply()或原生Python循环。3万行数据下,两种方法都能在毫秒级完成计算,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:20:54