Python Pandas:两个长度相同的列中value_counts()不同

3
我有一个pandas数据框,包含两列,一列是追踪号 [col_1],另一列是 ID 号 [col_2]。 追踪号和 ID 号都可能重复出现,但每个追踪号和 ID 号应该只对应相邻列中的一个特定关联者。
我的两列数据长度相同,但具有不同的唯一值计数,这些计数应该相同,如下所示:
in[1]:  Trace | ID
        1     | 5054
        2     | 8291
        3     | 9323
        4     | 9323
        ...   |
        100   | 8928

in[2]:  print('unique traces: ', df['Trace'].value_counts())
        print('unique IDs: ', df['ID'].value_counts())

out[3]: unique traces: 100
        unique IDs: 99

在上述代码中,相同的ID号码(9232)由两个跟踪号(3和4)表示 - 我应该如何分离这些情况呢?感谢您的阅读!

我理解你想要找到重复项,是吗?如果是的话,你需要行号还是重复的“ID”? - MSeifert
@MSeifert - 最好是行号。谢谢! - tmdangerous
3个回答

3
通过使用duplicated()函数(文档),您可以执行以下操作:
df[df['ID'].duplicated(keep=False)]

keep设置为False,我们将得到所有的重复项(而不是排除第一个或最后一个)。

这将返回:

Trace   ID
2   3   9323
3   4   9323

@ScottBoston 但这只检查重复项。OP要求每个ID组的Trace唯一元素数量。这将返回具有相同Trace的相同ID,但您的不会。我认为这是不正确的。 - ayhan

1
您可以使用groupbyfilter:
df.groupby('ID').filter(lambda x: x.Trace.nunique() > 1)

输出:

  Trace      ID
2     3  9323.0
3     4  9323.0

0
#this should tell you the index of Non-unique Trace or IDs.

df.groupby('ID').filter(lambda x: len(x)>1)
Out[85]: 
   Trace    ID
2      3  9323
3      4  9323

df.groupby('Trace').filter(lambda x: len(x)>1)
Out[86]: 
Empty DataFrame
Columns: [Trace, ID]
Index: []

这只返回一个数据框,其中有两个或更多个跟踪号的实例 - 而不是说,如果有相同跟踪号的两个实例,但是对于该相同跟踪号有两个[或更多]不同的ID。 - tmdangerous
第一个groupby检查重复的ID,第二个检查重复的Trace。 - Allen Qin

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