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

如何扩展Pandas中基于多条件的np.where列计算逻辑

多条件下的DataFrame列分类实现方法

嗨,你已经掌握了单条件下用np.where生成分类列的技巧,要扩展到多条件场景其实很简单,这里给你两种常用且高效的方法:

方法一:使用np.select(灵活适配任意多条件)

np.select可以定义多个条件和对应的结果,非常适合非连续、自定义的多规则场景。比如你提到的:

  • 年龄小于20 → 'kid'
  • 年龄在20到50之间(含20,不含50)→ 'adult'
  • 年龄大于等于50 → 'senior'

直接看代码示例:

import pandas as pd
import numpy as np

# 构造你的数据
data = {'name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy', 'Tom'], 
        'age': [42, 52, 36, 24, 73, 18], 
        'preTestScore': [4, 24, 31, 2, 3, 10], 
        'postTestScore': [25, 94, 57, 62, 70, 40]}
df = pd.DataFrame(data, columns = ['name', 'age', 'preTestScore', 'postTestScore'])

# 定义条件列表和对应的结果列表
conditions = [
    df['age'] < 20,
    (df['age'] >= 20) & (df['age'] < 50),
    df['age'] >= 50
]
choices = ['kid', 'adult', 'senior']

# 生成category列
df['category'] = np.select(conditions, choices, default='unknown')

运行后你会看到Tom(18岁)被标记为kid,Jason(42岁)是adult,Molly(52岁)是senior,完美匹配需求。如果有特殊情况没覆盖到,还可以用default参数设置默认值。

方法二:使用pd.cut(适合连续区间划分)

如果你的分类是基于连续的数值区间,pd.cut会更简洁,它可以直接把数值按区间分组并分配标签:

# 定义区间和对应标签
bins = [0, 20, 50, float('inf')]
labels = ['kid', 'adult', 'senior']

# 生成category列
df['category'] = pd.cut(df['age'], bins=bins, labels=labels, right=False)

这里的right=False表示区间是左闭右开(比如[0,20)对应小于20,[20,50)对应20到50之间),和我们的需求一致。如果需要右闭左开,把right改成True即可。

这两种方法都能轻松解决多条件分类的问题,你可以根据自己的场景选择:如果条件是自定义的非连续规则,选np.select;如果是连续区间划分,pd.cut更省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:49:32