如何按多列筛选pandas数据帧

2024-05-20 15:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

要按单个列筛选数据帧(df),如果考虑男性和女性的数据,我们可以:

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

问题1——但是如果数据跨越多年,我只想在2014年看到男性,那会怎么样?

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

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

(除了我想这样做并在新的dataframe对象中获取原始dataframe的子集)

问题2。如何在循环中执行此操作,并为每个唯一的年份和性别集创建一个数据帧对象(即df for:2013 Male、2013 Female、2014 Male和2014 Female

for y in year:

for g in gender:

df = .....

Tags: and数据对象in语言dataframedffor
3条回答

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

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)

对于要用作筛选器且依赖于多个列的更一般的布尔函数,可以使用:

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。

pandas 0.13开始,这是最有效的方法。

df.query('Gender=="Male" & Year=="2014" ')

相关问题 更多 >