我希望能够在不事先知道名称和列数的情况下获取数据集中重复行的所有实例的索引。所以假设我有这个:
col 1 | 1 2 | 2 3 | 1 4 | 1 5 | 2
我希望能够得到[1, 3, 4]和[2, 5]。有什么办法可以做到这一点?听起来确实很简单,但是由于我事先不知道各列,所以无法执行类似的操作df[col == x...]。
[1, 3, 4]
[2, 5]
df[col == x...]
首先过滤所有duplicated行,然后 groupby使用apply或转换index to_series:
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:
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