【问题标题】:What is the pandas equivalent of the R function %in%?什么是 R 函数 %in% 的 pandas 等价物?
【发布时间】:2021-06-12 13:52:22
【问题描述】:

R 函数 %in% 的 pandas 等效项是什么?

当我们在 R 中有一个数据框时,我们可以使用运算符 %in% 检查一列中哪些行包含列表中的字符串,该运算符给出布尔输出。

具体示例:如果我们要检查字符串“setosa”和“virginica”在iris数据集的species列中的哪些行,我们可以简单地使用以下代码:

iris[:,c('species')] %in% c('setosa', 'virginica').

我们如何在 python 中为pandas DataFrame 做同样的事情?

我想这样做的原因是我想过滤数据集,只保留物种“setosa”或“virginica”的行。

【问题讨论】:

    标签: python r pandas iris-dataset


    【解决方案1】:

    R中的%in%实际上是is.element:

    r$> 1 %in% 1:2                    
    [1] TRUE
    
    r$> is.element(1, 1:2)                                  
    [1] TRUE
    

    datar 已将 R 中的一些函数移植到 python:

    >>> from datar.all import c, f, is_element, filter
    >>> from datar.datasets import iris
    >>> 
    >>> iris >> filter(is_element(f.Species, c('setosa', 'virginica')))
        Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species
           <float64>    <float64>     <float64>    <float64>   <object>
    0            5.1          3.5           1.4          0.2     setosa
    1            4.9          3.0           1.4          0.2     setosa
    2            4.7          3.2           1.3          0.2     setosa
    3            4.6          3.1           1.5          0.2     setosa
    ..           ...          ...           ...          ...        ...
    4            5.0          3.6           1.4          0.2     setosa
    95           6.7          3.0           5.2          2.3  virginica
    96           6.3          2.5           5.0          1.9  virginica
    97           6.5          3.0           5.2          2.0  virginica
    98           6.2          3.4           5.4          2.3  virginica
    99           5.9          3.0           5.1          1.8  virginica
    
    [100 rows x 5 columns]
    

    我是datar 包的作者。如果您有任何问题,请随时提交问题。

    【讨论】:

      【解决方案2】:

      pandas 包具有用于字符串列的 .str 方法,.str 方法本身包含 .isin() 方法,它等效于 R 中的 %in% 运算符。

      您上面的 R 代码可以使用 pandas 在 python 中实现,如下所示 - 假设 iris 是 pandas DataFrame:

      iris.species.str.isin(['setosa', 'virginica'])

      然后您可以过滤您的 DataFrame 并仅保留物种为“setosa”或“virginica”的行,如下所示:

      iris[iris.species.str.isin(['setosa', 'virginica'])]

      【讨论】:

      • 您可能想删除.str。 Isin 可以应用于series 或df,但不是str 方法。
      • 谢谢@rhug123,这很有帮助,我不知道!我还是 python 新手。我将编辑答案。
      猜你喜欢
      • 1970-01-01
      • 2023-01-17
      • 2015-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2012-12-27
      • 2018-11-13
      相关资源
      最近更新 更多