【问题标题】:Filtering a field with multiple values pandas python过滤具有多个值的字段pandas python
【发布时间】:2017-12-03 08:39:20
【问题描述】:

一个非常基本的问题,如果之前有人问过但找不到答案,请道歉。

尝试根据性别过滤数据集,以便我可以看到女孩和男孩的销售情况,但数据是按标题完成的,即先生、夫人、小姐和女士。

我有男人的:

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

对于女性,我希望包括 MR、MRS 和 MISS,即

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

但显然“和”是不正确的。

帮助表示赞赏!

【问题讨论】:

    标签: python pandas filter


    【解决方案1】:

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

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

    或者,我们可以通过以下方式做到这一点:

    使用正则表达式:

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

    使用.query()方法:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        之前肯定有人问过这个问题,但是你去吧。

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

        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})
        

        【讨论】:

          猜你喜欢
          • 2019-04-23
          • 1970-01-01
          • 2022-06-22
          • 2019-01-29
          • 1970-01-01
          • 2020-09-23
          • 1970-01-01
          • 2020-11-03
          • 2019-01-16
          相关资源
          最近更新 更多