2012-10-18 21 views
6

Gibt es eine Funktion zu erzwingen, dass der Index einzigartig ist oder ist es nur möglich, dies in Python "sich selbst" durch die Konvertierung in dict und zurück oder so ähnlich?Python Pandas entfernen Duplikate in Serie

Wie in den Kommentaren erwähnt: Python Pandas ist ein Projekt auf numpy/scipy gebaut.

to_dict und zurück funktioniert, aber ich wette, das wird langsam, wenn Sie groß werden.

In [24]: a = pandas.Series([1,2,3], index=[1,1,2]) 

In [25]: a 
Out[25]: 
1 1 
1 2 
2 3 

In [26]: a = a.to_dict() 

In [27]: a 
Out[27]: {1: 2, 2: 3} 

In [28]: a = pandas.Series(a) 

In [29]: a 
Out[29]: 
1 2 
2 3 

Antwort

3

Verwenden groupby und last()

In [279]: s 
Out[279]: 
a 1 
b 2 
b 3 
b 4 
e 5 

In [280]: grouped = s.groupby(level=0) 

In [281]: grouped.first() 
Out[281]: 
a 1 
b 2 
e 5 

In [282]: grouped.last() 
Out[282]: 
a 1 
b 4 
e 5 
+0

In Pandas 0.8 und höher denke ich, dass Sie doppelte Indizes haben können ... d. H. S = Serie ([1,2,1], index = ['a', 'a', 'b']). to_dict und zurück macht den Trick, aber es scheint, dass es eine Option oder etwas geben sollte, um damit umzugehen, oder vielleicht hat es etwas mit der Art und Weise zu tun, wie ich die Serie konstruiere. – mathtick

+0

thanknks für die Klärung der Frage. Es ist schade, dass Sie Wes McKinney um ein paar Stunden verpasst haben ... – root

+0

@ mathtick - hat die Antwort bearbeitet. – root

6

BTW planen wir eine drop_duplicates Methode zur Serie wie DataFrame.drop_duplicates in naher Zukunft auf Hinzufügen.

+0

Seither hinzugefügt, aber für den Fall des OP mit verschiedenen Werten tut es nichts ('pd.Series ([1,2,3], Index = [1,1,2]). Drop_duplicates() '->' 1: 1, 1: 2, 2: 3'), so sollte die Antwort von root verwendet werden. – metakermit

+0

FWIW, 'df.drop_duplicates' wurde implementiert. –

+0

wurde für Dataframes @TimMcNamara implementiert, nicht für Series. –