Python在相同len()的两列中使用不同的值_counts()

Python在相同len()的两列中使用不同的值_counts(),python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个pandas数据框,它包含两列,跟踪编号[col_1]和ID编号[col_2]。跟踪编号可以重复,ID编号也可以重复-但是,每个跟踪和ID只能对应相邻列中的一个特定成员 我的两列中的每一列长度相同,但具有不同的唯一值计数,它们应该相同,如下所示: in[1]: Trace | ID 1 | 5054 2 | 8291 3 | 9323 4 | 9323 ... |

我有一个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)表示-如何隔离这些事件?谢谢你的关注

您可以使用
groupby
filter

df.groupby('ID').filter(lambda x: x.Trace.nunique() > 1)
输出:

  Trace      ID
2     3  9323.0
3     4  9323.0

通过使用
duplicated()
函数(),可以执行以下操作:

df[df['ID'].duplicated(keep=False)]
通过将
keep
设置为
False
,我们可以获得所有的副本(而不是排除第一个或最后一个副本)

返回:

Trace   ID
2   3   9323
3   4   9323

你想找到副本,对吗?如果是这样,您想要行号还是重复的
ID
?@MSeifert-行号是首选。谢谢这只是返回一个df,其中有两个以上的跟踪编号实例-不是说,有两个相同跟踪编号的实例,而是相同跟踪编号的两个[或更多]不同ID。第一个groupby检查重复ID,第二个检查重复跟踪。@ScottBoston,但这只检查重复。OP询问每个ID组的唯一跟踪元素的数量。这将返回具有相同跟踪的相同ID,但您的不会。我认为这是不对的。
Trace   ID
2   3   9323
3   4   9323