如何基于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
相关产品推荐
相关产品推荐

