Эффективный выбор STAR в pandas - PullRequest
1 голос
/ 25 января 2020

Существует тип выбора, называемый STAR , который является аббревиатурой от "Score затем Automati c Runoff". Это используется в ряде алгоритмических методов c, но типичным примером является голосование. В pandas это используется для выбора одного столбца под этим параметром c. Стандартный выбор «оценка» состоит в том, чтобы выбрать столбец кадра данных с наибольшей суммой. Это может быть просто выполнено с помощью

df.sum().idxmax()

Какой самый эффективный способ pythoni c сделать выбор STAR? Метод работает, но сначала выбирают два столбца с наибольшей суммой, а затем выбирают победителя в качестве столбца, который чаще имеет большее значение между этими двумя. Кажется, я не могу написать это чисто.

1 Ответ

1 голос
/ 25 января 2020

Вот мой пример

Пример 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 против 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

После того, как у вас есть верхний столбец, просто нарежьте его

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...