我希望能够获取数据集中所有重复行的索引,而不需要事先知道列的名称和数量。假设我有以下数据:
col
1 | 1
2 | 2
3 | 1
4 | 1
5 | 2
我希望能够获取[1, 3, 4]
和[2, 5]
,有什么方法可以实现吗?这听起来很简单,但由于我事先不知道列名,因此无法像df[col == x...]
那样做。
首先过滤掉所有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
a = df.index.to_series().groupby(df.col).apply(list)
print (a)
col
1 [1, 3, 4]
2 [2, 5]
dtype: object
如果需要嵌套列表:
L = df.groupby('col').apply(lambda x: list(x.index)).tolist()
print (L)
[[1, 3, 4], [2, 5]]
如果只需要使用第一列,可以使用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
df = df[df.duplicated(subset=['col','col1','col2'], keep=False)]
。如果想通过所有列检查重复,请使用df = df[df.duplicated(keep=False)]
。 - jezrael