有一种称为STAR的选择类型,它是“分数然后自动径流”的首字母缩写。这在许多算法方法中都使用过,但是典型的例子是投票。在熊猫中,这用于选择该指标下的单个列。标准的“得分”选择是选择数据框的总和最高的列。这可以简单地通过
df.sum().idxmax()
做STAR选择的最有效的pythonic方法是什么?该方法有效,但首先将两列的总和最高,然后将获胜者作为该两列之间具有较高价值的列。我似乎无法以一种简洁的方式来编写它。
这是我的看法
样品 df
Out[1378]:
A B C D
0 5 5 1 5
1 0 1 5 5
2 3 3 1 3
3 4 5 0 4
4 5 5 1 1
第1步:使用sum
,nlargest
用于和片列Score step
df_tops = df[df.sum().nlargest(2, keep='all').index]
Out[594]:
B D
0 5 5
1 1 5
2 3 3
3 5 4
4 5 1
第2步:比较df_tops
againsmax
的df_tops
创建布尔结果。终于,sum
并调用idxmax
就可以了
finalist = df_tops.eq(df_tops.max(1), axis=0).sum().idxmax()
Out[608]: 'B'
或者,你可以使用idxmax
和mode
进行step 2
。这将返回一系列顶列名称
finalist = df_tops.idxmax(1).mode()
Out[621]:
0 B
dtype: object
在获得顶列之后,将其切成薄片
df[finalist]
Out[623]:
B
0 5
1 1
2 3
3 5
4 5
注意:如果各runner-up
列的总和相同,则步骤2仅选择一列。如果你希望它挑两个同一等级/票亚军列,你需要使用nlargest
和index
替代idxmax
,输出将是数组
finalist = df_tops.eq(df_tops.max(1), axis=0).sum().nlargest(1, keep='all').index.values
Out[615]: array(['B'], dtype=object)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句