繁体   English   中英

根据条件删除列表的重复项

[英]Remove duplicates of list based on condition

说,我有以下两个列表:

list1 = ['A', 'A', 'B', 'B', 'C', 'D']
list2 = ['x', 'y', 'y', 'x', 'x', 'y']

我想根据list2中重复项的对应元素为'y'的条件消除list1的所有重复项及其在list2中的对应元素。

预期结果:

list1 = ['A', 'B', 'C', 'D']
list2 = ['y', 'y', 'x', 'y']

最后的最终目标是根据返回的索引继续做事,例如上面的例子:

index = [1, 2, 4, 5]

我尝试通过使用熊猫来解决这个问题:

df = pd.DataFrame(zip(list1, list2), columns=["l1", "l2"])
df = df[(~(df.duplicated(['l1']))) | (df.duplicated(['l1']) & df.l2.eq('y'))]

但这并没有给我正确的结果。 请注意,我不能引用第一个或最后一个元素的删除,因为“x”和“y”不需要以相同的顺序出现。

带有熊猫的解决方案很好,但不是必需的,带有列表理解的解决方案也可以。

你可以使用:

# keep if: l1 is not duplicated     OR  l2 == "y"
df[~df['l1'].duplicated(keep=False) | df['l2'].eq('y')]

输出:

  l1 l2
1  A  y
2  B  y
4  C  x
5  D  y

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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