这是一个基本的问题,如果之前被问到但是无法找到答案,请道歉。
尝试根据性别过滤数据集,以便我可以看到女孩子销售分割,但数据是通过标题完成的,即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"]
但显然"和"不正确。
帮助表示赞赏!
答案 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']