2014-05-21 101 views
-2

我有一个包含访问网站的熊猫数据框,我有两列ID号和格式为YYYY-mm-dd HH:mm:ss的日期。我想获得一个数据框,其中包含客户的任何访问之间的时间差。我发现如何使用GROUPBY获得访问次数,但其余的我不知道。熊猫时间序列分析

任何人都可以帮助我吗?

编辑:

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 

而且我想获得对每个ID号类似

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

现在我只设法计算与阵列中的每个ID号的访问次数。 。GROUPBY([ '编号'])尺寸()

+3

你应该提供你做了什么,数据帧和样本输出 – Jeff

+0

有点模糊没有数据和代码 – EdChum

+0

的样品我编辑,以使其更清晰的了解 – user3661305

回答

0

要计算的访问次数,你可以使用GROUPBY和cumcount

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

接下来,在这段时间里,你可以使用diff每个组:

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 

这给你的差异为timedelta,以秒为单位并填写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

类似如下:

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() 

输出:

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]