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行)。让我们
根据优先级值对数据帧的列进行排序,然后使用+onaxis=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