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

如何使用np.select返回所有满足条件的选项并合并结果?

问题

我有一个pandas DataFrame,需要逐行检查哪些条件为True。当存在多个满足的条件时,希望返回所有对应的选项并合并,该如何实现?

示例代码:

df = pd.DataFrame({'cond1':[True, True, False, True],
                   'cond2':[False, False, True, True],
                   'cond3':[True, False, False, True],
                   'value': [1, 3, 3, 6]})

conditions = [df['cond1'] & (df['value']>4),
             df['cond2'],
             df['cond2'] & (df['value']>2),
             df['cond3'] & df['cond2']]

choices     = [ '1', '2', '3', '4']

df["class"] = np.select(conditions, choices, default=np.nan)

当前输出:

cond1  cond2  cond3  value class
0   True  False   True      1   NaN
1   True  False  False      3   NaN
2  False   True  False      3     2
3   True   True   True      6     1

期望输出:

cond1  cond2  cond3  value           class
0   True  False   True      1             NaN
1   True  False  False      3             NaN
2  False   True  False      3        2 and 3
3   True   True   True      6  1 and 2 and 3 and 4
解决方案

np.select的逻辑是返回第一个匹配条件对应的结果,无法直接返回所有满足条件的选项。要实现需求,可以通过以下步骤处理:

  1. 将所有条件转换为布尔值组成的DataFrame,每行对应原数据的行,每列对应一个条件的判断结果
  2. 逐行筛选出布尔值为True的位置,匹配对应的choices选项
  3. 用' and '连接每行的所有匹配选项,无匹配项则设为NaN

实现代码:

import pandas as pd
import numpy as np

df = pd.DataFrame({'cond1':[True, True, False, True],
                   'cond2':[False, False, True, True],
                   'cond3':[True, False, False, True],
                   'value': [1, 3, 3, 6]})

conditions = [df['cond1'] & (df['value']>4),
             df['cond2'],
             df['cond2'] & (df['value']>2),
             df['cond3'] & df['cond2']]

choices     = [ '1', '2', '3', '4']

# 把条件列表转为布尔DataFrame,行列对应原数据行和各个条件
cond_matrix = pd.DataFrame(conditions).T

# 逐行处理:筛选符合条件的选项并合并
df['class'] = cond_matrix.apply(
    lambda row: ' and '.join([choices[i] for i, is_true in enumerate(row) if is_true]),
    axis=1
)

# 将空字符串替换为NaN,与原逻辑保持一致
df['class'] = df['class'].replace('', np.nan)

print(df)

运行后即可得到期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 16:13:16