Pour filtrer un dataframe (df) par une seule colonne, si nous considérons les données avec des hommes et des femmes, nous pourrions:
males = df[df[Gender]=='Male']
Question 1 - Mais que se passerait-il si les données s'étalaient sur plusieurs années et que je voulais voir uniquement les hommes pour 2014?
Dans d'autres langues, je pourrais faire quelque chose comme:
if A = "Male" and if B = "2014" then
(sauf que je veux faire cela et obtenir un sous-ensemble du dataframe d'origine dans un nouvel objet dataframe)
Question 2. Comment faire cela en boucle et créer un objet dataframe pour chaque ensemble unique d'année et de sexe (c'est-à-dire un df pour: 2013-Homme, 2013-Femme, 2014-Homme et 2014-Femme
for y in year:
for g in gender:
df = .....
groupby
.Réponses:
En utilisant l'
&
opérateur, n'oubliez pas d'encapsuler les sous-instructions avec()
:Pour stocker vos dataframes dans une à l'
dict
aide d'une boucle for:ÉDITER:
Une démo pour votre
getDF
:la source
key
comme dans votregetDF
? un seul paramètre ou un tuple de clés? be specific plz;)Gender
etYear
doit être tous les deux des chaînes, c'est-à-dire'Gender'
et'Year'
.Pour des fonctions booléennes plus générales que vous souhaitez utiliser comme filtre et qui dépendent de plusieurs colonnes, vous pouvez utiliser:
où f est une fonction qui est appliquée à chaque paire d'éléments (x1, x2) de col_1 et col_2 et renvoie True ou False selon la condition que vous souhaitez (x1, x2).
la source
Commencez par pandas 0.13 , c'est le moyen le plus efficace.
la source
Au cas où quelqu'un se demanderait quel est le moyen le plus rapide de filtrer (la réponse acceptée ou celle de @redreamality):
Résultats pour 100 000 lignes:
Résultats pour 10 000 000 lignes:
Les résultats dépendent donc de la taille et des données. Sur mon ordinateur portable,
query()
devient plus rapide après 500 000 lignes. En outre, la recherche de chaîne dansYear=="2014"
a une surcharge inutile (Year==2014
est plus rapide).la source
query
syntaxe est plus nette et proche de SQL, ce qui la rend agréable pour les données depuis. Le chery sur le gâteau, c'est qu'il est plus rapide avec de nombreuses rangées :)Vous pouvez créer votre propre fonction de filtre en utilisant
query
inpandas
. Ici, vous avez le filtrage desdf
résultats par tous leskwargs
paramètres. N'oubliez pas d'ajouter des validateurs (kwargs
filtrage) pour obtenir votre propre fonction de filtredf
.la source
Vous pouvez filtrer par plusieurs colonnes (plus de deux) en utilisant l'
np.logical_and
opérateur pour remplacer&
(ounp.logical_or
pour remplacer|
)Voici un exemple de fonction qui fait le travail, si vous fournissez des valeurs cibles pour plusieurs champs. Vous pouvez l'adapter à différents types de filtrage et autres:
Usage:
la source