查找pandas数据框中的所有重复行

Nic*_*ico 3 python dataframe pandas

我希望能够在不事先知道列的名称和数量的情况下获取数据集中重复行的所有实例的索引.所以假设我有这个:

     col
1  |  1
2  |  2
3  |  1
4  |  1
5  |  2
Run Code Online (Sandbox Code Playgroud)

我希望能够得到[1, 3, 4][2, 5].有没有办法实现这个目标?这听起来很简单,但由于我事先不知道这些列,所以我不能做类似的事情df[col == x...].

jez*_*ael 10

首先过滤所有duplicated行,然后 groupby使用apply或转换index to_series:

df = df[df.col.duplicated(keep=False)]

a = df.groupby('col').apply(lambda x: list(x.index))
print (a)
col
1    [1, 3, 4]
2       [2, 5]
dtype: object
Run Code Online (Sandbox Code Playgroud)
a = df.index.to_series().groupby(df.col).apply(list)
print (a)
col
1    [1, 3, 4]
2       [2, 5]
dtype: object
Run Code Online (Sandbox Code Playgroud)

如果需要嵌套列表:

L = df.groupby('col').apply(lambda x: list(x.index)).tolist()
print (L)
[[1, 3, 4], [2, 5]]
Run Code Online (Sandbox Code Playgroud)

如果需要只使用第一列可以通过以下位置选择iloc:

a = df[df.iloc[:,0].duplicated(keep=False)]
      .groupby(df.iloc[:,0]).apply(lambda x: list(x.index))
print (a)
col
1    [1, 3, 4]
2       [2, 5]
dtype: object
Run Code Online (Sandbox Code Playgroud)