2014-04-22 6 views
4

Je commence juste avec Pandas et j'essaie de combiner: Regrouper mes données par date, et compter les valeurs uniques dans chaque groupe.Pandas: comptez des valeurs uniques après rééchantillonnage

Voici ce que mes données ressemble à:

    User, Type 
Datetime 
2014-04-15 11:00:00, A, New 
2014-04-15 12:00:00, B, Returning 
2014-04-15 13:00:00, C, New 
2014-04-20 14:00:00, D, New 
2014-04-20 15:00:00, B, Returning 
2014-04-20 16:00:00, B, Returning 
2014-04-20 17:00:00, D, Returning 

Et voici ce que je voudrais arriver à: Resample l'indice datetime le jour (que je peux faire), et compter également les utilisateurs uniques pour chaque journée. La colonne "Type" ne m'intéresse pas encore.

Day, Unique Users 
2014-04-15, 3 
2014-04-20, 2 

J'essaie df.user.resample('D', how='count').unique, mais il ne semble pas me donner la bonne réponse.

Répondre

5

Vous n'avez pas besoin de faire un rééchantillonnage pour obtenir le résultat souhaité dans votre question. Je pense que vous pouvez obtenir avec juste une groupby à ce jour:

print df.groupby(df.index.date)['User'].nunique() 

2014-04-15 3 
2014-04-20 2 
dtype: int64 

Et si vous voulez vous pourriez Rééchantillonne combler les lacunes de la série après que vous comptez les utilisateurs uniques:

cnt = df.groupby(df.index.date)['User'].nunique() 
cnt.index = cnt.index.to_datetime() 
print cnt.resample('D') 

2014-04-15  3 
2014-04-16 NaN 
2014-04-17 NaN 
2014-04-18 NaN 
2014-04-19 NaN 
2014-04-20  2 
Freq: D, dtype: float64 
+0

je devais utiliser 'imprimer df.groupby (de df.index.date) [ 'User'] appliquer (lambda x: x.nunique())' mais cela a fonctionné. Merci! –

-1

Je courais dans le même problème. La réponse de Karl D fonctionne pour une sorte de réindexation - à ce jour, par exemple. mais que faire si vous voulez que l'index soit

Jan 2014 
Feb 2014 
March 2014 

puis le tracer en tant que timeseries?

Voici ce que je l'ai fait.

df.user.resample('M',lambda x: x.nunique()) 
Questions connexes