I have a DataFrame as below
df = pd.DataFrame({
'x' : range(0,5),
'y' : [[0,2],[3,4],[2,3],[3,4],[7,9]]
})
I would like to test for each row of x, if the value is in the list specified by column y
df[df.x.isin(df.y)]
so I would end up with:
Not sure why isin() does not work in this case
CodePudding user response:
df.x.isin(df.y)
checks for each element x
, e.g. 0
, is equal to some of the values of df.y
, e.g. is 0
equal to [0,2]
, no, and so on.
With this, you can just do a for loop:
df[ [x in y for x,y in zip(df['x'], df['y'])] ]
CodePudding user response:
Let us try explode
with index loc
out = df.loc[df.explode('y').query('x==y').index.unique()]
Out[217]:
x y
0 0 [0, 2]
2 2 [2, 3]
3 3 [3, 4]