#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