我有一个包含网站访问量的Pandas DataFrame,我有两列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
目前我只设法使用array.groupby([' ID'])计算每个ID号的访问次数.size()
答案 0 :(得分: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]
答案 1 :(得分: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