【问题标题】:Filter Multiple Values using pandas使用 pandas 过滤多个值
【发布时间】:2016-05-11 21:08:25
【问题描述】:

我正在使用 Python 和 Pandas。我有一个 df 与此类似:

 +--------+--------+-------+
 |  Col1  |  Col2  | Col3 |
 +--------+--------+-------+
 | Team 1 | High   | Pizza |
 | Team 1 | Medium | Sauce |
 | Team 1 | Low    | Crust |
 +--------+--------+-------+

我想过滤 df,以便我只能看到来自 Col2 的 High 或 Medium。

这是我没有运气的尝试

 df = df.loc[df['Col2'] == 'High' | (df['Col2'] == 'Medium')]

这是我遇到的错误

 cannot compare a dtyped [bool] array with a scalar of type [bool]

任何想法如何使这项工作以及该错误意味着什么?

【问题讨论】:

    标签: python pandas filtering


    【解决方案1】:

    您缺少一对括号来获取 | 运算符两侧的可比较项目 - 其优先级高于 == (see docs)

    df = df.loc[(df['Col 2'] == 'High') | (df['Col2'] == 'Medium')]
    

    【讨论】:

      【解决方案2】:

      这也有效,更 Pythonic

      country_list = ['brazil','poland','russia','countrydummy','usa']
      
      filtered_df = df[df['Country Name'].isin(country_list)]
      print(filtered_df )
      

      【讨论】:

      • 这个解决方案更好,因为你可以使用country_list的动态长度
      • 谢谢!在此处查看docs 文档以获取更多详细信息。
      【解决方案3】:

      您也可以使用(对于 Pandas >= 0.13):

      filtered_df = df.query( '"Country Name" == ["brazil","poland","russia","countrydummy","usa"]' )
      
      print(filtered_df )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-05
        • 2017-03-07
        • 2021-09-01
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        相关资源
        最近更新 更多