2016-05-08 7 views
5

Ich habe folgenden Datenrahmen:Pandas: drop Duplikate in groupby ‚date‘

url='https://raw.githubusercontent.com/108michael/ms_thesis/master/crsp.dime.mpl.df' 

df=pd.read_csv(url) 

df.groupby('date').cid.size() 

date 
2005  7 
2006  237 
2007 3610 
2008 1318 
2009 2664 
2010  997 
2011 6390 
2012 2904 
2013 7875 
2014 3979 

df.groupby('date').cid.nunique() 

date 
2005  3 
2006  10 
2007 227 
2008  52 
2009 142 
2010  57 
2011 219 
2012  99 
2013 238 
2014 146 
Name: cid, dtype: int64 

Ich mag würde die doppelten cid Werte, so dass die Ausgabe von df.groupby('date').cid.size() entspricht die Ausgabe von df.groupby('date').cid.nunique() zu beseitigen. Ich habe mir dieses post angesehen, aber es scheint keine feste Lösung für das Problem zu haben.

Ich habe versucht, die folgenden:

df.groupby([df['date']]).drop_duplicates(cols='cid') 

Aber ich bekomme diese Fehlermeldung:

AttributeError: Cannot access callable attribute 'drop_duplicates' of 'DataFrameGroupBy' objects, try using the 'apply' method 

und diese:

df.groupby(('date').drop_duplicates('cid')) 

Aber ich bekomme diese Fehlermeldung:

AttributeError: 'str' object has no attribute 'drop_duplicates' 

Hat jemand eine Idee dazu?

Antwort

11

Sie nicht groupby brauchen Duplikate auf wenige Spalten basierend fallen, können Sie einen Teil stattdessen angeben:

df2 = df.drop_duplicates(["date", "cid"]) 
df2.groupby('date').cid.size() 
Out[99]: 
date 
2005  3 
2006  10 
2007 227 
2008  52 
2009 142 
2010  57 
2011 219 
2012  99 
2013 238 
2014 146 
dtype: int64 
+0

Danke für die Kommentare! Ja, das hat funktioniert! Ich wundere mich über eine Art von Teilmenge. –

+1

Gern geschehen. Dies funktioniert hauptsächlich deshalb, weil die Gruppierung nach Datum und die Suche nach Zeilen mit derselben CID in jeder Gruppe dasselbe ist wie die Suche nach Zeilen im Hauptdatenframe, die dasselbe Datum und dieselbe CID haben. – ayhan