有一种称为STAR的选择类型,它是“先得分后有自动径流”的缩写。这在许多算法方法中都使用过,但是典型的例子是投票。在熊猫中,这用于选择该指标下的单个列。标准的“得分”选择是选择数据框的总和最高的列。只需通过
即可完成df.sum().idxmax()
进行STAR选择的最有效的pythonic方法是什么?该方法有效,但首先选择总和最高的两列,然后将获胜者作为在这两者之间具有较高价值的列。我似乎无法用一种干净的方式写这句话。
答案 0 :(得分:1)
这是我的看法
示例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步:比较{{1}中的df_tops
和max
,以创建布尔结果。最后,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
列的总和相同,则步骤2仅选择一列。如果您希望它选择相同的排名/投票亚军列,则需要使用df[finalist]
Out[623]:
B
0 5
1 1
2 3
3 5
4 5
和runner-up
而不是nlargest
,并且输出将为数组
index