我有一个包含两列的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)表示 - 我如何隔离这些事件?谢谢你的期待!
答案 0 :(得分:2)
使用duplicated()
函数(docs),您可以执行以下操作:
df[df['ID'].duplicated(keep=False)]
通过将keep
设置为False
,我们会获得所有重复项(而不是排除第一项或最后一项)。
返回:
Trace ID
2 3 9323
3 4 9323
答案 1 :(得分:1)
您可以使用groupby
和filter
:
df.groupby('ID').filter(lambda x: x.Trace.nunique() > 1)
输出:
Trace ID
2 3 9323.0
3 4 9323.0
答案 2 :(得分: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: []