選項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
很好,謝謝!它確實有效。 –