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 ?