你如何按多列过滤熊猫数据框

新手上路,请多包涵

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

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

问题 1 - 但是如果数据跨越多年并且我只想查看 2014 年的男性怎么办?

在其他语言中,我可能会执行以下操作:

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

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

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

 for y in year:

for g in gender:

df = .....

原文由 yoshiserry 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 377
2 个回答

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

 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)

原文由 zhangxaochen 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 redreamality 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题