假设我有 2 个列表列,如下所示:
group1 = [['John', 'Mark'], ['Ben', 'Johnny'], ['Sarah', 'Daniel']]
group2 = [['Aya', 'Boa'], ['Mab', 'Johnny'], ['Sarah', 'Peter']]
df = pd.DataFrame({'group1':group1, 'group2':group2})
我想比较两个列表列并从 group1
中删除列表元素(如果它们存在于 group2
中)。以上的预期结果:
group1 group2
['John', 'Mark'] ['Aya', 'Boa']
['Ben'] ['Mab', 'Johnny']
['Daniel'] ['Sarah', 'Peter']
我该怎么做?我试过这个:
df['group1'] = [[name for name in df['group1'] if name not in df['group2']]]
但出现错误:
TypeError: unhashable type: 'list'
请帮忙。
最佳答案
您需要zip
两个系列。我正在使用 set
这里是为了提高效率(如果每个列表只有几个项目,这并不重要):
df['group1'] = [[x for x in a if x not in S]
for a, S in zip(df['group1'], df['group2'].apply(set))]
输出:
group1 group2
0 [John, Mark] [Aya, Boa]
1 [Ben] [Mab, Johnny]
2 [Daniel] [Sarah, Peter]
关于python - 比较 Pandas 数据框中的 2 个列表列。如果存在于另一个列表中,则从一个列表中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74486315/