选项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
很好,谢谢!它确实有效。 –