2014-05-21 6 views
-2

J'ai un Pandas DataFrame contenant les visites sur un site web, j'ai un numéro d'identification à deux colonnes et la date au format AAAA-mm-jj HH: mm: ss. Et je voudrais obtenir un cadre de données contenant la différence de temps entre chaque visite d'un client. J'ai trouvé comment obtenir le nombre de visites en utilisant GROUPBY mais je ne sais pas pour le reste.Analyse de séries temporelles dans pandas

Quelqu'un peut-il m'aider s'il vous plaît?

Edit:

No.  IDs  date 
1  4678  2012-11-30 23:59:59 
2  4703  2012-11-30 23:59:23 
3  4678  2012-11-30 23:58:46 
4  5803  2012-11-30 23:58:19 
5  4678  2012-11-30 23:58:07 

Et je voudrais obtenir pour chaque numéro d'identification quelque chose comme

 Visit_number  duration since last visit 
4678  1     0 
      2     73s 
      3     39s 

Pour l'instant je réussi seulement à calculer le nombre de visites pour chaque numéro d'identification avec tableau. . groupby ([ 'ID']) taille()

+3

vous devez fournir ce que vous avez fait, un échantillon de la sortie de trame de données et de l'échantillon – Jeff

+0

Un peu vague sans données et le code – EdChum

+0

je modifié pour le rendre plus clair pour comprendre – user3661305

Répondre

0

Pour calculer le nombre de visites, vous pouvez utiliser groupby et cumcount:

In [76]: df['Visit_Number'] = df.groupby('IDs').cumcount() + 1 

Ensuite, pour la durée, vous pouvez utiliser diff pour chaque groupe:

In [77]: df['duration'] = - df.groupby('IDs')['date'].diff() 


In [78]: df 
Out[78]: 
    IDs    date Visit_Number duration 
0 4678 2012-11-30 23:59:59    1  NaT 
1 4703 2012-11-30 23:59:23    1  NaT 
2 4678 2012-11-30 23:58:46    2 00:01:13 
3 5803 2012-11-30 23:58:19    1  NaT 
4 4678 2012-11-30 23:58:07    3 00:00:39 

Cela vous donne la différence en tant que timedelta, pour l'avoir en quelques secondes et remplir les valeurs NaN:

In [79]: df['duration'] = df['duration'].astype('timedelta64[s]').fillna(0) 

In [80]: df 
Out[80]: 
    IDs    date Visit_Number duration 
0 4678 2012-11-30 23:59:59    1   0 
1 4703 2012-11-30 23:59:23    1   0 
2 4678 2012-11-30 23:58:46    2  73 
3 5803 2012-11-30 23:58:19    1   0 
4 4678 2012-11-30 23:58:07    3  39 
0

Quelque chose comme ce qui suit:

import pandas as pd 
import datetime 

a = pd.read_csv("a.csv") 
a.date = a.date.map(lambda s: datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S")) 
for user_id, series in a.sort("date").groupby("id"): 
    print user_id, series.date.diff() 

Sorties:

4678 4  NaT 
2 00:00:39 
0 00:01:13 
Name: date, dtype: timedelta64[ns] 
4703 1 NaT 
Name: date, dtype: timedelta64[ns] 
5803 3 NaT 
Name: date, dtype: timedelta64[ns] 
Questions connexes