熊猫的高效STAR选择

时间:2020-01-24 23:40:48

标签: python pandas sum

有一种称为STAR的选择类型,它是“先得分后有自动径流”的缩写。这在许多算法方法中都使用过,但是典型的例子是投票。在熊猫中,这用于选择该指标下的单个列。标准的“得分”选择是选择数据框的总和最高的列。只需通过

即可完成
df.sum().idxmax()

进行STAR选择的最有效的pythonic方法是什么?该方法有效,但首先选择总和最高的两列,然后将获胜者作为在这两者之间具有较高价值的列。我似乎无法用一种干净的方式写这句话。

1 个答案:

答案 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使用nlargestScore 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_topsmax,以创建布尔结果。最后,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