Python Pandas: supprimer les entrées sur la base du nombre d'occurrences
Je suis en train de supprimer des entrées à partir d'un bloc de données qui se produisent à moins de 100 fois.
Le bloc de données data
ressemble à ceci:
pid tag
1 23
1 45
1 62
2 24
2 45
3 34
3 25
3 62
Maintenant, je compte le nombre de balise occurrences comme ceci:
bytag = data.groupby('tag').aggregate(np.count_nonzero)
Mais ensuite je n'arrive pas à comprendre comment faire pour supprimer ces entrées qui ont une faible numération...
- Comme @unutbu suggère, veuillez tenir compte de la modification de la accepté de répondre à cette méthode de filtrage est plus simple 🙂 )
Vous devez vous connecter pour publier un commentaire.
Edit: Merci à @WesMcKinney pour montrer cette manière beaucoup plus directe:
rendements
Nouveau dans 0.12, grouper les objets ont une
filtre
méthode, vous permettant de faire ces types d'opérations:La fonction (le premier argument de filtre) est appliquée à chaque groupe (sous châssis), et les résultats d'inclure des éléments de l'original DataFrame appartenant à des groupes évaluée à Vrai.
Remarque: dans 0.12 commande est différente de celle de l'original DataFrame, cela a été corrigé dans 0.13+:
dropna=False
. Si non, les groupes peuvent être mélangées. Recourir eux serait une perte de temps, alors je l'ai laissé à l'utilisateur, ce qui est un choix discutable.g.filter(lambda x: len(x) > 1, dropna=False).dropna()
pour maintenir l'ordre.groupby
transform
est plus de 2x plus rapide que l'utilisationfilter
permet de se rendre où le comte > 2
Ici sont quelques-uns des temps d'exécution pour un couple de solutions de posté ici, avec celui qui ne l'est pas (à l'aide de
value_counts()
) qui est beaucoup plus rapide que les autres solutions:Créer les données:
De sortie:
171 users only occur once in dataset
Temps quelques différentes façons de supprimer des utilisateurs avec une seule entrée. Ces ont été exécutés dans des cellules séparées dans un Jupyter Portable:
Ces a donné les résultats suivants: