Pandas извлечение подмножества из фрейма данных - PullRequest
0 голосов
/ 21 марта 2020

У меня есть pandas кадр данных, подобный следующему:

 index  Validation_Set  Topics   Alpha       Beta  Coherence
 0      75% Corpus      14         0.5        0.5   0.501483
 1      75% Corpus      14         0.5  symmetric   0.481676
 2     100% Corpus      14  asymmetric        0.5   0.500620
 3     100% Corpus      14         0.5  symmetric   0.492288
 4      75% Corpus      12         0.5        0.5   0.511823
 5      75% Corpus      12         0.5  symmetric   0.477614
 6     100% Corpus      12  asymmetric        0.5   0.489424
 7     100% Corpus      12         0.5  symmetric   0.541270
 8      75% Corpus       4         0.5        0.5   0.515683
 9      75% Corpus       4         0.5  symmetric   0.430614
10     100% Corpus       4  asymmetric        0.5   0.489324
11     100% Corpus       4         0.5  symmetric   0.473570

И так далее ... это результаты нескольких тестов для настройки параметров.

Теперь я хочу извлечь вся информация (все тесты параметров) только о лучшей модели, которая является той (или, может быть, более одной), которая достигла наибольшего значения 'Coherence' в полном наборе проверки (100% корпус).

В этом примере я получу [ОШИБКА, СМОТРЕТЬ РЕДАКТИРОВАТЬ] :

 index  Validation_Set  Topics   Alpha       Beta  Coherence
 7     100% Corpus      12         0.5  symmetric   0.541270

Мне удалось получить строку с наибольшим значением для 'Coherence' таким образом (df это полный фрейм данных):

corpus_100 = df[df['Validation_Set']=='100% Corpus']
topics_num = df.iloc[[corpus_100['Coherence'].idxmax()]]['Topics'].values[0]
opt_model = corpus_100[corpus_100['Topics']==topics_num]

И работает, но это действительно беспорядок, тогда я ищу более понятный способ реализовать это.

Спасибо!

РЕДАКТИРОВАТЬ: Мне очень жаль, но в желаемом выводе была опечатка, которая на самом деле:

 4      75% Corpus      12         0.5        0.5   0.511823
 5      75% Corpus      12         0.5  symmetric   0.477614
 6     100% Corpus      12  asymmetric        0.5   0.489424
 7     100% Corpus      12         0.5  symmetric   0.541270

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Попробуйте,

df[df['Coherence']==df['Coherence'].max()]

df[df['column']==value] фильтрует информационный фрейм для того, что вы ищете.

df['column']max() возвращает максимальное значение в столбце.

При их объединении будет возвращена строка кадра данных с максимальным значением в Coherence

0 голосов
/ 21 марта 2020

Похоже, nlargest () это именно то, что вам нужно

df[df['Validation_Set']=='100% Corpus'].nlargest(1,'Coherence')

    index   Validation_Set  Topics  Alpha   Beta        Coherence
    7       100%Corpus      12      0.5     symmetric   0.54127
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...