你怎么过滤多个列的pandas数据框

要通过单个列过滤数据框(df),如果我们考虑男性和女性的数据,我们可能会:

males = df[df[Gender]=='Male'] 

问题1 – 但是,如果数据跨越多年,我想只看到2014年的男性呢?

在其他语言中,我可能会这样做:

 if A = "Male" and if B = "2014" then 

(除了我想这样做,并获得一个新的数据框对象的原始数据框的一个子集)

问题2:如何在循环中完成这项工作,并为每一个独特的年份和性别设置一个数据框对象(例如:2013-男性,2013-女性,2014-男性和2014-女性

 for y in year: for g in gender: df = ..... 

使用&运算符,不要忘记用()来包装子语句:

 males = df[(df[Gender]=='Male') & (df[Year]==2014)] 

要使用for循环将您的数据框存储在dict

 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 

编辑:

你的getDF的演示:

 def getDF(dic, gender, year): return dic[gender][year] print genDF(dic, 'male', 2014) 

对于您希望用作filter并依赖于多个列的更一般的布尔函数,可以使用:

 df = df[df[['col_1','col_2']].apply(lambda x: f(*x), axis=1)] 

其中f是应用于来自col_1和col_2的每对元素(x1,x2)的函数,并根据您想要的(x1,x2)上的任何条件返回True或False。