Pour filtrer une base de données (df) en une seule colonne, si nous considérons des données avec des hommes et des femmes, nous pourrions:
males = df[df[Gender]=='Male']
Question 1 - Mais que se passe-t-il si les données couvrent plusieurs années et que je ne souhaite voir que des hommes en 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 de la trame de données d'origine dans un nouvel objet dataframe)
Question 2. Comment faire cela dans une boucle et créer un objet dataframe pour chaque série unique d’années et de genres (c.-à-d. Un df pour: 2013-Homme, 2013-Femme, 2014-Homme et 2014-Femme
for y in year:
for g in gender:
df = .....
En utilisant &
opérateur, n’oubliez pas d’envelopper les sous-instructions avec ()
:
males = df[(df[Gender]=='Male') & (df[Year]==2014)]
Pour stocker vos images dans un dict
en utilisant une boucle for:
from collections import defaultdict
dic={}
for g in ['male', 'female']:
dic[g]=defaultdict(dict)
for y in [2013, 2014]:
dic[g][y]=df[(df[Gender]==g) & (df[Year]==y)] #store the DataFrames to a dict of dict
Une démo pour votre getDF
:
def getDF(dic, gender, year):
return dic[gender][year]
print genDF(dic, 'male', 2014)
Pour les fonctions booléennes plus générales que vous souhaitez utiliser en tant que filtre et qui dépendent de plusieurs colonnes, vous pouvez utiliser:
df = df[df[['col_1','col_2']].apply(lambda x: f(*x), axis=1)]
où f est une fonction qui est appliquée à chaque paire d'éléments (x1, x2) à partir de col_1 et col_2 et renvoie True ou False selon la condition que vous voulez (x1, x2).
Commencez par Pandas 0,1 , c'est le moyen le plus efficace.
df.query('Gender=="Male" & Year=="2014" ')