[英]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.