【发布时间】:2021-10-29 15:42:21
【问题描述】:
我有一个如下的DataFrame
df = pd.DataFrame({
'x' : range(0,5),
'y' : [[0,2],[3,4],[2,3],[3,4],[7,9]]
})
我想测试 x 的每一行,如果值在 y 列指定的列表中
df[df.x.isin(df.y)]
所以我最终会得到:
不知道为什么 isin() 在这种情况下不起作用
【问题讨论】:
我有一个如下的DataFrame
df = pd.DataFrame({
'x' : range(0,5),
'y' : [[0,2],[3,4],[2,3],[3,4],[7,9]]
})
我想测试 x 的每一行,如果值在 y 列指定的列表中
df[df.x.isin(df.y)]
所以我最终会得到:
不知道为什么 isin() 在这种情况下不起作用
【问题讨论】:
df.x.isin(df.y) 检查每个元素 x,例如0,等于df.y 的一些值,例如是 0 等于 [0,2],否,等等。
有了这个,你可以做一个 for 循环:
df[ [x in y for x,y in zip(df['x'], df['y'])] ]
【讨论】:
让我们试试explode 索引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]
【讨论】: