Python equivalent of the R operator "%in%"

Question:

What is the python equivalent of this in operator? I am trying to filter down a pandas database by having rows only remain if a column in the row has a value found in my list.

I tried using any() and am having immense difficulty with this.

Asked By: wolfsatthedoor

||

Answers:

Pandas comparison with R docs are here.

s <- 0:4
s %in% c(2,4)

The isin method is similar to R %in% operator:

In [13]: s = pd.Series(np.arange(5),dtype=np.float32)

In [14]: s.isin([2, 4])
Out[14]: 
0    False
1    False
2     True
3    False
4     True
dtype: bool
Answered By: Jeff

FWIW: without having to call pandas, here’s the answer using a for loop and list compression in pure python

x = [2, 3, 5] 
y = [1, 2, 3]

# for loop
for i in x: [].append(i in y)

Out: [True, True, False]


# list comprehension
[i in y for i in x]

Out: [True, True, False]
Answered By: data_steve

As others indicate, in operator of base Python works well.

myList = ["a00", "b000", "c0"]

"a00" in myList
# True

"a" in myList
# False
Answered By: stok

If you want to use only numpy without panads (like a use case I had) then you can:

import numpy as np

x = np.array([1, 2, 3, 10])
y = np.array([10, 11, 2])
np.isin(y, x)

This is equivalent to:

c(10, 11, 2) %in% c(1, 2, 3, 10)

Note that the last line will work only for numpy >= 1.13.0, for older versions you’ll need to use np.in1d.

Answered By: RiskyMaor
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.