3 votes

Fréquence d'un petit sous-ensemble de valeurs dans un grand cadre de données Pandas

Ce site pregunta a fourni un exemple de la façon dont un compte de fréquence pour une ligne donnée peut être obtenu à partir d'un dataframe pandas en utilisant pd.get_dummies + agrégation. Cependant, cette méthode n'est pas adaptée si vous ne souhaitez obtenir qu'un petit sous-ensemble de termes à partir d'un très grand cadre de données.

Prenons par exemple le même exemple :

import pandas as pd

df = pd.DataFrame({'ID': ['xyz_1', 'xyz_2', 'xyz_3', 'xyz_4', 'xyz_400'],
                   'class1': ['yes_1', 'no_2', pd.NA, 'no_3', 'no_7'],
                   'class2': ['no_8', 'yes_15', 'yes_16', 'no_18', 'no_21'],
                   'class3': [pd.NA, 'no_51', 'yes_1', 'no_3', 'no_4'],
                   'class100': ['yes_3', 'no_5', pd.NA, 'yes_6', 'no_7']})

        ID class1  class2 class3 class100
0    xyz_1  yes_1    no_8   <NA>    yes_3
1    xyz_2   no_2  yes_15  no_51     no_5
2    xyz_3   <NA>  yes_16  yes_1     <NA>
3    xyz_4   no_3   no_18   no_3    yes_6
4  xyz_400   no_7   no_21   no_4     no_7

Au lieu que les valeurs soient dans l'ensemble des oui et des non, elles peuvent être l'une des nombreuses variables catégorielles différentes. Si vous voulez simplement des termes de fréquence pour oui_1, non_51, cela représente une tonne de calculs supplémentaires.

La meilleure solution que j'ai trouvée jusqu'à présent est de prétraiter les autres valeurs en NANs.

set = ['yes_1', 'no_51']
df[~df.isin(set)] = pd.NA

     ID class1 class2 class3 class100
0  <NA>  yes_1   <NA>   <NA>     <NA>
1  <NA>   <NA>   <NA>  no_51     <NA>
2  <NA>   <NA>   <NA>  yes_1     <NA>
3  <NA>   <NA>   <NA>   <NA>     <NA>
4  <NA>   <NA>   <NA>   <NA>     <NA>

Cela reste d'une lenteur glaçante pour les grands cadres de données de l'ordre d'un million d'entrées. Existe-t-il un moyen d'améliorer ce système ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X