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

3

假设我有下面这两个列表:

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

我想基于以下条件在list1中消除所有重复项及其在list2中对应的元素,条件是在list2中与重复项对应的元素为"y"。

期望的结果:

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

在最终目标中,根据返回的索引继续执行相关操作。对于上面的例子,具体操作如下:
index = [1, 2, 4, 5]

我尝试使用 Pandas 解决这个问题:

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

但这并没有给我正确的结果。请注意,我无法引用第一个或最后一个元素来删除,因为 'x' 和 'y' 不需要以相同的顺序出现。
使用pandas的解决方案可以,但不是必需的,使用列表推导式的解决方案也可以。
1个回答

3

您可以使用:

# 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接