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

在Pandas DataFrame中基于多逻辑条件新增列的最优实现方法

最优实现方法:使用numpy.select()向量化操作

嘿,针对这个新增列的需求,**numpy.select()**是最优的解决方案,尤其是当你的DataFrame数据量较大时,它的效率比逐行处理的方法高得多!

具体实现步骤:

  1. 先导入需要的库:
import pandas as pd
import numpy as np
  1. 创建你的示例DataFrame:
df = pd.DataFrame({'A': [1, 2], 'B': [2, 2], 'C': [3, 3], 'D': [4, 4]})
  1. 定义条件列表和对应的取值列表:
# 定义判断条件
conditions = [
    (df['A'] > df['B']) & (df['B'] > df['C']),
    (df['A'] < df['B']) & (df['B'] < df['C'])
]
# 对应条件的输出值
choices = [1, 2]
  1. 使用numpy.select()新增目标列(这里命名为'E'):
df['E'] = np.select(conditions, choices, default=3)

为什么这是最优方法?

  • 它是向量化操作,底层基于C语言实现,处理速度远快于df.apply()这类逐行遍历的方法,在大数据量场景下(比如十万、百万行),两者的效率差距会非常明显。
  • 代码结构清晰,条件和对应取值一一对应,可读性强,后期修改或扩展条件也很方便。

补充:不推荐的低效方法(仅作对比)

如果用apply()实现,代码虽然也能跑,但效率极低,数据量大时会严重拖慢处理速度:

def get_target_value(row):
    if row['A'] > row['B'] and row['B'] > row['C']:
        return 1
    elif row['A'] < row['B'] and row['B'] < row['C']:
        return 2
    else:
        return 3

df['E'] = df.apply(get_target_value, axis=1)

这种方法会逐行遍历每一条数据,本质是Python层面的循环,性能远不如向量化操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:50