pandasデータフレーム内の重複行を見つけようとしています。
df=pd.DataFrame(data=[[1,2],[3,4],[1,2],[1,4],[1,2]],columns=['col1','col2'])
df
Out[15]:
col1 col2
0 1 2
1 3 4
2 1 2
3 1 4
4 1 2
duplicate_bool = df.duplicated(subset=['col1','col2'], keep='first')
duplicate = df.loc[duplicate_bool == True]
duplicate
Out[16]:
col1 col2
2 1 2
4 1 2
最初の複製(保持されている複製)のインデックスを参照する列を追加する方法はありますか
duplicate
Out[16]:
col1 col2 index_original
2 1 2 0
4 1 2 0
注:私の場合、dfは非常に大きくなる可能性があります。
groupby
を使用し、インデックスの新しい列を作成してから、duplicated
を呼び出します。
df['index_original'] = df.groupby(['col1', 'col2']).col1.transform('idxmin')
df[df.duplicated(subset=['col1','col2'], keep='first')]
col1 col2 index_original
2 1 2 0
4 1 2 0
詳細
最初の2列をgroupby
し、次にtransform
+ idxmin
を呼び出して、各グループの最初のインデックスを取得します。
df.groupby(['col1', 'col2']).col1.transform('idxmin')
0 0
1 1
2 0
3 3
4 0
Name: col1, dtype: int64
duplicated
は、保持したい値のブールマスクを提供します。
df.duplicated(subset=['col1','col2'], keep='first')
0 False
1 False
2 True
3 False
4 True
dtype: bool
残りはブールインデックスです。