You can do a similar thing with numpy isclose :
df[np.isclose(df['A'].values[:, None], [3, 6], atol=.5).any(axis=1)] Out: AB 1 6.0 2.0 2 3.3 3.2
np.isclose returns this:
np.isclose(df['A'].values[:, None], [3, 6], atol=.5) Out: array([[False, False], [False, True], [ True, False], [False, False]], dtype=bool)
This is a pairwise comparison of the elements df['A'] and [3, 6] (so we needed df['A'].values[: None] for translation). Since you are looking to see if it is close to one of them in the list, we call .any(axis=1) at the end.
For multiple columns, change the slice a bit:
mask = np.isclose(df[['A', 'B']].values[:, :, None], [3, 6], atol=0.5).any(axis=(1, 2)) mask Out: array([False, True, True, False], dtype=bool)
You can use this mask to trim a DataFrame (ie df[mask] )
If you want to compare df['A'] and df['B'] (and possible other columns) with different vectors, you can create two different masks:
mask1 = np.isclose(df['A'].values[:, None], [1, 2, 3], atol=.5).any(axis=1) mask2 = np.isclose(df['B'].values[:, None], [4, 5], atol=.5).any(axis=1) mask3 = ...
Then slice:
df[mask1 & mask2] # or df[mask1 & mask2 & mask3 & ...]