Python 多个条件满足numpy select

Python 多个条件满足numpy select,python,pandas,dataframe,numpy,Python,Pandas,Dataframe,Numpy,我使用以下数据帧: A B C D E F 100 0 0 0 100 0 0 100 0 0 0 100 -100 0 0 0 100 0 该代码: cond = [ (df['A'] == 100), (df['A'] == -100), (df['B'] == 100), (df['C'] == 100), (df['D'] == 100), (df['E']

我使用以下数据帧:

     A   B  C  D   E   F
    100  0  0  0  100  0
     0  100 0  0   0  100
   -100  0  0  0  100  0 
该代码:

cond = [
    (df['A'] == 100),
    (df['A'] == -100),
    (df['B'] == 100),
    (df['C'] == 100),
    (df['D'] == 100),
    (df['E'] == 100),
    (df['F'] == 100),
    ]
choices = ['A','neg_A', 'B', 'C','D', 'E', 'F']
df['result'] = np.select(cond, choices)
对于这两行,将有两个结果,但我只希望选择一个。我希望根据以下标准进行选择:

   +A = 67%
   -A = 68%
    B = 70%
    C = 75%
    D = 66%
    E = 54%
    F = 98%
百分比显示准确率,因此我希望百分比最高的一个比另一个更受欢迎

预期结果:

    A   B  C  D   E   F   result
    100  0  0  0  100  0     A
     0  100 0  0   0  100    F
   -100  0  0  0  100  0    neg_A 
很少的帮助将被感激。谢谢

编辑:


一些列(如A)可能混合了100和-100。正100将产生一个简单的a(见第1行),但a-100应该在结果中产生一些其他名称,如“neg_a”(见第3行)。

让我们
根据
优先级
值对数据帧的列进行排序,然后使用+on
axis=1
获得第一次出现
100
的列名:

# define a dict with col names and priority values
d = {'A': .67, 'B': .70, 'C': .75, 'D': .66, 'E': .54, 'F': .98}

df['result'] = df[sorted(d, key=lambda x: -d[x])].eq(100).idxmax(axis=1)


嘿,谢谢你的回答。其中一些立柱为hv-100。我该怎么考虑呢?@JoharInamUnnar所以你想把这些列与
-100
?是的,目前它只寻找100。我希望它也能找到你-100@JoharInamUnnar您可以使用
.isin
代替
eq
类似的
.isin([100,-100])
…或者您可以使用
abs
值,如
df[sorted(d,key=lambda x:-d[x])。abs类似的
eq(100)。idxmax(axis=1)
我考虑了一下,意识到你的方法可能无法解决我的问题。我是否可以将字典添加到我的numpy.select方法中,因为我的问题要求我在任何列的值为负值时编写自定义名称。请看编辑,我在这种情况下又增加了一行。
     A    B  C  D    E    F result
0  100    0  0  0  100    0      A
1    0  100  0  0    0  100      F