df группируется по 2 столбцам и n.наибольшая в 3-м столбце

#python #pandas #dataframe

Вопрос:

У меня проблема, это мой df

 {'libelle_competence': {0: 'Accessoires automobile',  1: 'Accueil téléphonique',  2: 'Activités de remise en forme',  3: 'Activités physiques et sportives adaptées',  4: 'Activités physiques pour tous'},  'Familles professionnelles': {0: ' Vendeurs',  1: ' Professions para-médicales',  2: " Professionnels de l'action culturelle, sportive et surveillants",  3: " Professionnels de l'action culturelle, sportive et surveillants",  4: " Professionnels de l'action culturelle, sportive et surveillants"},  'prevalence comp': {0: 0.264107210349354,  1: 0.25039387926072904,  2: 0.5523925685283885,  3: 0.5523925685283885,  4: 0.5523925685283885},  'prevalence comp %': {0: 26.410721034935314,  1: 25.03938792607282,  2: 55.23925685283866,  3: 55.23925685283866,  4: 55.23925685283866}}  

Я хочу сгруппировать по семейным профессиям и компетентности libelle_competence и добавить для сортировки столбца распространенность % с nlargest(10) (только для того, чтобы сохранить 10 первых компетенций libelle)

 df.groupby(["Familles professionnelles","libelle_competence"])["prevalence comp %"].nlargest(10)  

но это не то, чего я хочу.

Редактировать : То, что я показываю, в основном является заголовком моего фрейма данных для диктовки. Вот как выглядит мой df: введите описание изображения здесь

идея состоит в том, чтобы построить график для каждой «семьи профессий», когда я сохраняю только 10 лучших компетенций libelle_competence, которые соответствуют проценту распространенности . Так лучше ?

Комментарии:

1. Я не совсем понимаю, чего ты хочешь. Я могу выполнить ваш фрагмент кода, и он делает именно то, что, как я думал, вы хотели 😀 Ваши входные данные имеют только одно значение для каждой группы. Таким образом, в принципе, ничего нельзя сделать, ограничившись 10 значениями. Результат, которого вы ожидаете, немного поможет.

2. @maow Я отредактировал свой пост

Ответ №1:

groupby заставит панд выполнять следующую функцию для всех групп. В вашем случае вы хотите отказаться от части своих 'libelle_competence' ценностей. Поэтому вы не должны помещать их в группу.

Использование nlargest будет абсолютно работать. Однако, если вы хотите сохранить другие столбцы, вам нужно немного отформатировать. Я сделал что-то вроде этого (используя только 2 верхних значения, чтобы что-то было отфильтровано :D)

 In [14]: df.groupby('Familles professionnelles').apply(lambda x: x.nlargest(2, 'prevalence comp %')).drop('Familles professionnelles', axis=1).reset_index(level=1, drop=True) Out[14]:   libelle_competence prevalence comp prevalence comp % Familles professionnelles   Professionnels de l'a... Activités de remise e... 0.5524 55.2393  Professionnels de l'a... Activités physiques e... 0.5524 55.2393  Professions para-médi... Accueil téléphonique 0.2504 25.0394  Vendeurs Accessoires automobile 0.2641 26.4107  

Это то, чего ты хочешь?

Комментарии:

1. Да, большое вам спасибо, и извините за мое плохое объяснение xD