在Pandas DataFrame中基于多逻辑条件新增列的最优实现方法
最优实现方法:使用
numpy.select()向量化操作 嘿,针对这个新增列的需求,**numpy.select()**是最优的解决方案,尤其是当你的DataFrame数据量较大时,它的效率比逐行处理的方法高得多!
具体实现步骤:
- 先导入需要的库:
import pandas as pd import numpy as np
- 创建你的示例DataFrame:
df = pd.DataFrame({'A': [1, 2], 'B': [2, 2], 'C': [3, 3], 'D': [4, 4]})
- 定义条件列表和对应的取值列表:
# 定义判断条件 conditions = [ (df['A'] > df['B']) & (df['B'] > df['C']), (df['A'] < df['B']) & (df['B'] < df['C']) ] # 对应条件的输出值 choices = [1, 2]
- 使用
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
相关产品推荐
相关产品推荐

