繁体   English   中英

一个以上条件满足 numpy select

[英]More than one condition meet numpy select

我hv以下dataframe:

     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 行),但 -100 应该在结果中产生一些其他名称,例如“neg_A”(参见第 3 行)。

让我们根据priority值对 dataframe 的列进行sort ,然后在axis=1上使用.eq + .idxmax来获取第一次出现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)

     A    B  C  D    E    F result
0  100    0  0  0  100    0      A
1    0  100  0  0    0  100      F

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM