你如何通过多列过滤 pandas 数据框 [英] how do you filter pandas dataframes by multiple columns
问题描述
要按单列过滤数据框 (df),如果我们考虑包含男性和女性的数据,我们可能会:
To filter a dataframe (df) by a single column, if we consider data with male and females we might:
males = df[df[Gender]=='Male']
问题 1 - 但如果数据跨越多年并且我只想看到 2014 年的男性怎么办?
Question 1 - But what if the data spanned multiple years and i wanted to only see males for 2014?
在其他语言中,我可能会这样做:
In other languages I might do something like:
if A = "Male" and if B = "2014" then
(除非我想这样做并在新的数据帧对象中获取原始数据帧的子集)
(except I want to do this and get a subset of the original dataframe in a new dataframe object)
问题 2. 我如何在循环中执行此操作,并为每个独特的年份和性别集创建一个数据框对象(即 df 用于:2013-Male、2013-Female、2014-Male 和 2014-Female
Question 2. How do I do this in a loop, and create a dataframe object for each unique sets of year and gender (i.e. a df for: 2013-Male, 2013-Female, 2014-Male, and 2014-Female
for y in year:
for g in gender:
df = .....
推荐答案
使用 &
操作符,不要忘记用 ()
包裹子语句:
Using &
operator, don't forget to wrap the sub-statements with ()
:
males = df[(df[Gender]=='Male') & (df[Year]==2014)]
使用 for 循环将数据帧存储在 dict
中:
To store your dataframes in a dict
using a for loop:
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)
这篇关于你如何通过多列过滤 pandas 数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!