2017-03-20 6 views
3

事前に列の名前と数を知らずに、データセット内の重複した行のすべてのインスタンスのインデックスを取得したいと考えています。だから私はこれを持っていると仮定します。パンダのデータフレーム内の重複する行をすべて見つけよう

 col 
1 | 1 
2 | 2 
3 | 1 
4 | 1 
5 | 2 

私は[1, 3, 4][2, 5]を取得できるようにしたいと思います。これを達成する方法はありますか?それは本当にシンプルに聞こえるが、私は事前に列を知らないので、df[col == x...]のようなことはできない。

答えて

8

まずフィルタすべてduplicated行と、その後applygroupbyまたはindexto_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]] 

のみ最初の使用が必要な場合positioで選択可能な列ですilocのn:私はdf.columnsをGROUPBYする必要が列を知らないので、

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 
+0

はオーケーことはことを除いて、良いことだが、それは大丈夫です。私はグループバイを自分で考えなかったのか分かりません。 – Nico

+0

私は選択のためのソリューションをポジション別に追加します。 – jezrael

+0

これは、複数の列を持つ重複行も検出できますか?私は、** col ** **を表示していないことを意味します。** col1 **、** col2 **、** col3 **などの例では表示されません。 – Nabin

関連する問題