Python np.where的多个条件

Python np.where的多个条件,python,pandas,Python,Pandas,我有以下数据帧: region pop_1 pop_1_source pop_2 pop_2_source pop_3 pop_3_source a 99 x1 84 x2 61 x3 b 64 x1 65 x2 16 x3 c 92 x1 26 x2 6 x3 d 82 x1 60 x2 38 x3 e 45 x1 77 x2 42 x3 我可以通过以下方式计算每个区域的最高值: df['u

我有以下数据帧:

region  pop_1   pop_1_source    pop_2   pop_2_source    pop_3   pop_3_source
a   99  x1  84  x2  61  x3
b   64  x1  65  x2  16  x3
c   92  x1  26  x2  6   x3  
d   82  x1  60  x2  38  x3
e   45  x1  77  x2  42  x3
我可以通过以下方式计算每个区域的最高值:

df['upper_limit'] = df[['pop_1','pop_2','pop_3']].max(axis=1)
如果我只比较两个总体,我可以计算出最高总体的来源,即:

df['upper_limit_source'] = np.where(df.upper_limit == df['upper_limit'],df.pop_1,df.pop_2)
但是,如果我尝试将其展开以搜索所有三列,它将无法工作。 我已经寻找了一个解决方案,但无法使用np.where(np.logical_)或类似的方法


我遗漏了一些明显的东西吗?

我发现你的问题有点让人困惑(除其他外,
df.upper\u limit==df['upper\u limit']
总是正确的,你的“source”列都充满了
x1
(除了一个
1x
,看起来像是打字错误)

但是,您似乎想找出三列中哪一列是最大的,然后根据这一点计算一个值。因此,要计算负责的列,您可以使用:

这将为每一行提供0、1或2,具体取决于三列中的哪一列是最大值

现在,例如,如果您想根据索引选择
pop_1_source
pop_2_source
、或
pop_3_source
,您可以使用:


您是对的,是一个复制/粘贴错误,已编辑df以显示正确的源代码。感谢您的回答,工作非常完美!
import numpy as np

idmax = np.argmax(df[['pop_1','pop_2','pop_3']].as_matrix(), axis=1)
np.choose(idmax, df[[`pop_1_source', 'pop_2_source', pop_3_source']].as_matrix().T)