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

Python pandas DataFrame无循环实现if else条件赋值的方法

无for循环实现方案

实现思路

通过向量化条件判断实现匹配赋值,全程无Python层显式循环,计算效率高,适配不同规模的数据集。

完整代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
data = {
  "a": [0, 1, 0,1],
  "b": [0,0,1,1]
}
df = pd.DataFrame(data)

# 构造条件列表和对应取值
conditions = [
    df['a'] == df['b'],
    (df['a'] == 0) & (df['b'] == 1),
    (df['a'] == 1) & (df['b'] == 0)
]
a_values = [1, 0.25, 0.75]
b_values = [1, 0.75, 0.25]

# 生成结果DataFrame
df2 = pd.DataFrame({
    'a': np.select(conditions, a_values),
    'b': np.select(conditions, b_values)
})

结果验证

打印df2可得到符合要求的输出:

序号ab
01.001.00
10.750.25
20.250.75
31.001.00

如果不想额外依赖numpy,也可以用pandas原生的mask方法实现等价逻辑:

df2 = df.copy()
# 相同值场景赋值1
df2[df['a'] == df['b']] = 1
# a=0、b=1场景赋值
mask1 = (df['a'] == 0) & (df['b'] == 1)
df2.loc[mask1, 'a'] = 0.25
df2.loc[mask1, 'b'] = 0.75
# a=1、b=0场景赋值
mask2 = (df['a'] == 1) & (df['b'] == 0)
df2.loc[mask2, 'a'] = 0.75
df2.loc[mask2, 'b'] = 0.25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:36:06