2016-05-08 9 views
5

Ho il seguente dataframe:panda: duplicati goccia in groupby 'data'

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 

vorrei eliminare i duplicati cid valori in modo tale che l'uscita dal df.groupby('date').cid.size() corrisponde l'uscita dal df.groupby('date').cid.nunique(). Ho visto questo post ma non sembra avere una soluzione solida al problema.

Ho provato quanto segue:

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

ma ottengo questo errore:

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

e questo:

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

ma ottengo questo errore:

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

Qualcuno ha un'idea su questo?

risposta

11

Non è necessario groupby far cadere i duplicati basati su alcune colonne, è possibile specificare un sottoinsieme invece:

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

Grazie per il commento! Sì, ha funzionato! Mi sto chiedendo una specie di sottoinsieme. –

+1

Prego. Questo funziona principalmente perché raggruppare in data e cercare le righe con lo stesso cid in ogni gruppo è lo stesso che cercare le righe nel dataframe principale che hanno la stessa data e cid. – ayhan