相当于 R 函数 %in% 的 Pandas 是什么?

问题描述

Pandas 相当于 R 函数 %in% 是什么?

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

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

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

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

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

解决方法

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 包的作者。如果您有任何问题,请随时提交问题。

,

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

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

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

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

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