问题描述
这是我的问题,我想在数据帧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]