2017-10-10 43 views
1

我想查看我的數據框中每個索引對應的唯一值。假設我有以下數據框:在熊貓數據框中找到具有相同索引的列中的唯一值

 A 
ind1 a 
ind1 a 
ind1 a 
ind1 b 
ind1 b 
ind2 a 
ind2 b 
ind2 c 

我怎樣才能得到一個表:

 index_related_uniqe 
ind1 a 
ind1 b 
ind2 a 
ind2 b 
ind2 c 

我試圖用drop_duplicates,但其適用於去除整個列。

例如df.drop_duplicates( 'A',一直= '第一')給出:

ind1 a 
ind1 b 
ind2 c 

任何想法是高度讚賞。

+1

使用'df.reset_index()的神器。drop_duplicates()。set_index( '索引')' – Zero

+0

很好,謝謝!它確實有效。 –

回答

1

選項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'

相關問題