使用多个值pandas python过滤字段

时间:2017-06-29 14:56:13

标签: python pandas filter

这是一个基本的问题,如果之前被问到但是无法找到答案,请道歉。

尝试根据性别过滤数据集,以便我可以看到女孩子销售分割,但数据是通过标题完成的,即Mr,Mrs,Miss&毫秒。

我有男人:

men = cd.loc[cd.title_desc == "MR", "SALES"]

对于女性我想要MR,MRS& MISS包括即。

women = cd.loc[cd.title_desc == "MRS" and "MISS" and "MS", "SALES"]

但显然"和"不正确。

帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

之前肯定有人问过,但是你走了。

通过过滤多个值来创建两个不同的Series对象:

men = cd.loc[cd.title_desc == 'MR','SALES']
women = cd.loc[cd.title_desc.isin(['MRS','MISS','MS']), 'SALES']

或者,如果您想直接按性别划分总销售额:

cd['gender'] = ''
cd.loc[cd.title_desc == 'MR', 'gender'] = 'men'
cd.loc[cd.title_desc.isin(['MRS','MISS','MS']), 'gender'] = 'women'
cd.groupby('gender').agg({'SALES': sum})

答案 1 :(得分:0)

您必须将其分解为多个逻辑语句,然后您可以将其与逻辑或运算符“|”组合。生成的布尔向量可以与.loc

一起使用
bvec = (cd.title_desc == "MRS") | (cd.title_desc == "MISS") | (cd.title_desc == "MS")
women = cd.loc[bvec,"SALES"]

答案 2 :(得分:0)

在Pandas中有很多方法可以做到这一点。

最好的一个IMO @jack6e has shown in his answer

或者我们可以通过以下方式实现:

使用RegEx:

cd.loc[cd.title_desc.str.contains(r'^MRS|MISS|MS$'), 'SALES']

使用.query()方法:

titles = ['MRS','MISS','MS']
cd.query("title_desc in @titles")['SALES']