オプション1
使用pd.DataFrame.duplicated
とブールマスクとして値を使用します。これにより、インデックスをリセットしてから再度設定する必要性が減ります。私たちは、単に私たちは、完全に新しいパンダのオブジェクトを作成するから自分自身を削除するために発電機を使用することができますpd.DataFrame.duplicated
とスライス
df[~df.reset_index().duplicated().values]
A
ind1 a
ind1 b
ind2 a
ind2 b
ind2 c
オプション2
を利用するためにそれをリセット。
d = {}
z = zip(df.index.values.tolist(), df.A.values.tolist())
df[[False if k in d else d.setdefault(k, True) for k in z]]
A
ind1 a
ind1 b
ind2 a
ind2 b
ind2 c
タイミング
私たちは、これがこの小さなデータサンプルよりもパフォーマンスが向上見ることができます。
%timeit df.reset_index().drop_duplicates().set_index('index')
%timeit df[~df.reset_index().duplicated().values]
%%timeit
d = {}
z = zip(df.index.values.tolist(), df.A.values.tolist())
df[[False if k in d else d.setdefault(k, True) for k in z]]
1.53 ms ± 37.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
945 µs ± 44 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
188 µs ± 3.05 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
また)以前に無名のインデックス'index'
は( 'df.reset_indexを使用して命名のアーティファクトを生成する避けることができます。drop_duplicates()。set_index( 'インデックス')' – Zero
グレート、ありがとう!それはうまくいった。 –