简体   繁体   中英

Check if a value in one column is in a list in another column using pd.isin()

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

df.x.isin(df.y) checks for each element x , eg 0 , is equal to some of the values of df.y , eg 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'])] ]

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]

Just an other solution:

result = (
    df
    .assign(origin_y = df.y)
    .explode('y')
    .query('x==y')
    .drop(columns=['y'])
    .rename({'origin_y': 'y'})
)

   x       y
0  0  [0, 2]
2  2  [2, 3]
3  3  [3, 4]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM