【问题标题】:Filter dataframe index on multiple conditions在多个条件下过滤数据帧索引
【发布时间】:2019-11-08 00:20:47
【问题描述】:

pandas.DataFrame.filter 中,有没有一种方法可以使用参数“like”或“regex”,以便它们支持 OR 条件。例如:

df.filter(like='bbi', axis=1) 

将过滤名称中包含 bbi 的列,但如何过滤包含 'bbi''abc' 的列?

一些失败的选项:

df.filter(like='bbi' or 'abc', axis=1) 

df.filter(like=('bbi' or 'abc'), axis=1) 

【问题讨论】:

    标签: pandas filter


    【解决方案1】:

    不熟悉filter 命令。但是我认为你可以像这样实现你想要的:

    df[(df['column'].str.contains('bbi', case=False)) | (df['column'].str.contains('abc', case=False))]
    

    【讨论】:

    • 实际上,我想我可以删除.loc
    【解决方案2】:

    我会做以下事情:

    设置:

    df=pd.DataFrame(np.random.randint(0,20,20).reshape(5,4),
                              columns=['abcd','bcde','efgh','bbia'])
    print(df)
    

       abcd  bcde  efgh  bbia
    0    10    17     2     7
    1     7    12    18     9
    2    17     7    11    17
    3    14     4     2     9
    4    15    10    12    11
    

    解决方案:

    使用df.filter

    df.filter(regex=r'(abc|bbi)')
    

       abcd  bbia
    0    10     7
    1     7     9
    2    17    17
    3    14     9
    4    15    11
    

    【讨论】:

      【解决方案3】:

      请查看附件截图。

      正则表达式搜索速度较慢。所以我们保留regex=False

      希望这会有所帮助。谢谢。

      【讨论】:

        猜你喜欢
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 2021-05-06
        • 2020-09-13
        • 1970-01-01
        相关资源
        最近更新 更多