首页 > 解决方案 > 使用 pandas 查找不同组之间的重复行

问题描述

问题

考虑以下数据框:

data_so = {
        'ID':  [100, 100, 100, 200, 200, 300, 300, 300],
        'letter': ['A','B','A','C','D','E','D','A'],
}
df_so = pandas.DataFrame (data_so, columns = ['ID', 'letter'])

在此处输入图像描述

我想获得一个新列,其中不同组中的所有重复项都是 True。同一组中的所有其他重复项应为 False。

我试过的

我试过使用

df_so['dup'] = df_so.duplicated(subset=['letter'], keep=False)

但结果不是我想要的:

在此处输入图像描述

第 1 组(第 0 行)中第一次出现 A 是True因为在另一个组(第 7 行)中有重复项。但是,同一组(第 2 行)中所有其他出现的 A 应该是False

如果第 7 行被删除,那么第 0 行应该是False因为 A 不再存在于任何其他组中。

标签: pythonpandaspandas-groupby

解决方案


正如您在评论中澄清的那样,您需要在 current 旁边添加一个额外的掩码duplicated

m1 = df_so.duplicated(subset=['letter'], keep=False)
m2 = ~df_so.groupby('ID').letter.apply(lambda x: x.duplicated())

df_so['dup'] = m1 & m2

Out[157]:
    ID letter    dup
0  100      A   True
1  100      B  False
2  100      A  False
3  200      C  False
4  200      D   True
5  300      E  False
6  300      D   True
7  300      A   True
8  300      A  False

注意:我row=8在评论中添加了。


推荐阅读