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

如何在Pandas DataFrame中无循环实现条件差值计算

问题

现有如下Pandas DataFrame:

Date        1a          1b
112 2022-10-17  3.18        2.11
298 2022-10-16  4.26        7.00
340 2022-10-16  11.66       7.80    
379 2022-10-16  15.78       2.13    

要求在不使用循环的前提下,逐行判断1b列值是否大于1a列值:

  • 满足条件时,新增difference列存储两列差值(1b - 1a)
  • 不满足时填充0

最终目标DataFrame如下:

Date        1a          1b     difference
112 2022-10-17  3.18        2.11   0
298 2022-10-16  4.26        7.00   2.74
340 2022-10-16  11.66       7.80   0    
379 2022-10-16  15.78       2.13   0    
解决方案

方法1:使用numpy.where(直观易懂)

numpy.where可根据条件选择对应结果,直接实现需求:

import pandas as pd
import numpy as np

# 假设原数据存储在df中
df['difference'] = np.where(df['1b'] > df['1a'], df['1b'] - df['1a'], 0)

方法2:使用Pandas mask方法

先计算所有行的差值,再用mask将不满足条件的结果替换为0:

df['difference'] = (df['1b'] - df['1a']).mask(df['1b'] <= df['1a'], 0)

方法3:使用Pandas clip方法

当1b <= 1a时,1b - 1a为非正值,直接用clip将负值截断为0:

df['difference'] = (df['1b'] - df['1a']).clip(lower=0)

以上三种方法均为矢量化操作,无需循环,处理大数据集时效率远高于逐行遍历。

内容的提问来源于stack exchange,提问作者T.Joost

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:15:36