Python Pandas在另一列的元素列表中找到一列的元素

问题描述

这是我的问题,我想在数据帧B列的元素列表中找到A列的元素。结果,我只想保留那些在A中找到元素的行:

df = pd.DataFrame({'A': [1,2],'B': [1,3]
                 })
result = df[df.A.isin(df.B)]

>>> result
   A  B
0  1  1

工作正常,但我真正想要的是:

df = pd.DataFrame({'A': [1,'B': [[1,[1,3]]
                 })
result = df[df.A.isin(df.B)]

>>> result
Empty DataFrame
Columns: [A,B]
Index: []

哪个不起作用,因为A中的元素没有与B列中的列表元素进行比较,而是与整个列表进行比较?

我想要得到的是:

>>> result
   A       B
0  1  [1,2]

有可能吗?

解决方法

您可以执行apply

df[df.apply(lambda row: row['A'] in row['B'],axis=1)]

或zip理解:

df[[a in b for a,b in zip(df['A'],df['B'])]]

输出:

   A       B
0  1  [1,2]