2012-09-07 49 views
24

Yinelenen satırları olan bir DataFrame'im var. Eşsiz bir dizin ve çoğaltmaları olmayan bir DataFrame almak istiyorum. Yinelenen değerleri atmak tamamdır. Mümkün mü? groupby tarafından yapılmış mı?Pandalar: benzersiz veri çerçevesi

cevap

51
In [29]: df.drop_duplicates() 
Out[29]: 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

Bu, ya ilk ya da son meydana geldiği dikkate değer. Bu nedenle, önce başka bir miktara göre sıralama yapmalısınız (eğer şanslıysanız) ya da yine de karmaşık bir grup mantığı var. – ely

+2

Bu yanlış. drop_duplicates yalnızca değerler üzerinde çalışır (en azından benim sürümümde). İndeks ve değerlere düşmek isterseniz veya indeksle çalışmak istiyorsanız, index_index'i sıfırlamanız gerekir. Belki de grup endeksinin benzersiz endeksi uygulamak için başka bir yolu var mı? – mathtick

+1

Yeni bir değişken atamak istemiyorsanız, 'df.drop_duplicates (inplace = True)' seçeneğini kullanın. –

10

split-apply-combine dokümantasyon örneklerini okuyarak bunu yapmak için bir çıkış yolu düşündüm. veri alanları (b, c) etkili bir şekilde benzersiz olmasını istediğiniz vektör olarak satırın indeks parçası haline çoğaltıldığı burada satır indeksi dayanır

df = pandas.DataFrame({'b':[2,2,4,5], 'c': [3,3,0,9]}, index=[1,1,3,7]) 
df_unique = df.groupby(level=0).first() 

df 
    b c 
1 2 3 
1 2 3 
3 4 0 
7 5 9 

df_unique 
    b c 
1 2 3 
3 4 0 
7 5 9 
+0

satırlar için çoğaltılan (yinelenmez). – hobs

+3

Yinelenen dizin girişleriniz varsa, bu istediğiniz yanıttır. Bir MultIndex üzerinde unstack' 'yaparken Endeksi yinelenen girişler içeriyor, reshape' olamaz ama bu çözüm sadece ben' df_unique = df.groupby yapmak zorunda için çalışır (seviye = [0,1]): – rogueleaderr

+0

Ben ValueError 'başlamıştı. first() ' – dashesy

İlgili konular