如何处理np.where()中的多个条件?不使用.apply,因为它太慢了

问题描述 投票:0回答:1

更新:有了调查问题数据集,我需要将不同答案分类为不同类别:

Index,Q1,Q2,Q3,Q4,Q5,Q6,Q7
1,TRUE,FALSE,TRUE,TRUE,FALSE,TRUE,FALSE
2,TRUE,FALSE,FALSE,TRUE,FALSE,FALSE,TRUE
3,FALSE,FALSE,FALSE,TRUE,TRUE,FALSE,TRUE
4,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE
5,TRUE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE
6,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE
7,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,FALSE
8,TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,FALSE
9,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE
10,FALSE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE
11,TRUE,TRUE,FALSE,TRUE,FALSE,FALSE,TRUE

生成类别输出的规则(如果未提及,则接受TRUE或FALSE都是可以的:]

                                                      Output
Rule 1  Q1 = TRUE   Q2 = TRUE   Q5 = TRUE             High
Rule 2  Q1 = TRUE   Q2 = TRUE   Q4 = TRUE   Q7=TRUE   High
Rule 3  Q2 = TRUE   Q3 = TRUE   Q6 = TRUE             Mid
Rule 4  Q2 = TRUE   Q3 = TRUE   Q7 = TRUE             Mid
Rule 5  Q4 = TRUE   Q7 = TRUE   Q1 = FALSE  Q2= FALSE Mid-LOW
Rule 6  all = FALSE                                   LOW

我尝试了以下代码:

c1=df['Q1'].eq('TRUE')
c2=df['Q2'].eq('TRUE')
c3=df['Q5'].eq('TRUE')
c4=df['Q4'].eq('TRUE')
c5=df['Q5'].eq('TRUE')
c6=df['Q6'].eq('TRUE')
c7=df['Q7'].eq('TRUE')
df['Restock Action']=np.where((c1&c2&c5) | (c1&c2&c4&c7),'high','')

问题:在以下情况下,我该如何处理这种情况:1.多个规则具有相同的结果2.有多个结果(即高,中,中低,低)

谢谢!

python pandas
1个回答
0
投票

由于具有两个以上的条件,因此应在指定多个条件并基于这些条件选择的情况下使用np.select

我们使用np.select运算符(NOT)来捕获~Falsec1,因为它们是相反的。

c2

输出

conditions = [
    (c1&c2&c5) | (c1&c2&c4&c7),
    (c2&c3&c6) | (c2&c3&c7),
    c4%c7&~c1&~c2
]

choices = ['High', 'Mid', 'Mid-Low']

df['Restock Action'] = np.select(conditions, choices, default='Low')
© www.soinside.com 2019 - 2024. All rights reserved.