Найти внутренний индекс с минимальным значением в двойном индексе Groupby Dataframe - PullRequest
0 голосов
/ 05 июня 2018

У меня есть Pandas DataFrame, который после некоторых групповых операций, таких как:

df.groupby(["dataset", "method"])["mae"].mean()

, выглядит так:

dataset             method
acute.a             AC        0.003516
                    EDX       0.028901
                    EDy       0.029160
                    HDX       0.040332
                    HDy       0.027015
acute.b             AC        0.003575
                    EDX       0.043130
                    EDy       0.029151
                    HDX       0.016335
                    HDy       0.003692
balance.1           AC        0.012195
                    EDX       0.019322
                    EDy       0.010015
                    HDX       0.018285
                    HDy       0.009011
balance.2           AC        0.179619
                    EDX       0.259377
                    EDy       0.497555
                    HDX       0.444765
                    HDy       0.435202
balance.3           AC        0.028937
                    EDX       0.034840
                    EDy       0.014509
                    HDX       0.037650
                    HDy       0.014660
breast-cancer       AC        0.005540
                    EDX       0.007067
                    EDy       0.006252
                    HDX       0.012012
                    HDy       0.005629
                                ...  

Так что теперь я хочу захватить method, который даетминимальное значение (третий столбец) для каждого dataset.

Как я могу это сделать?

1 Ответ

0 голосов
/ 05 июня 2018

Вы можете использовать groupby с idxmin для значений MultiIndex на minimal значений для групп и для выбора второго значения кортежей добавьте str[1]:

s = df.groupby(["dataset", "method"])["mae"].mean()

s1 = s.groupby(level=0).idxmin().str[1]
print (s1)
dataset
acute.a           AC
acute.b           AC
balance.1        HDy
balance.2         AC
balance.3        EDy
breast-cancer     AC
Name: mae, dtype: object

При необходимости также можно выбрать значения с помощью loc:

s2 = s.loc[s.groupby(level=0).idxmin()]
print (s2)
dataset        method
acute.a        AC        0.003516
acute.b        AC        0.003575
balance.1      HDy       0.009011
balance.2      AC        0.179619
balance.3      EDy       0.014509
breast-cancer  AC        0.005540
Name: mae, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...