![](/img/trans.png)
[英]Time Series Analysis - unevenly spaced measures - pandas + statsmodels
[英]Time series analysis in pandas
我有一個包含一個網站上的訪問一個數據幀熊貓,我有兩列ID
號和date
格式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(['IDs']).size()
來計算每個 ID 號的訪問次數
要計算訪問次數,您可以使用 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
類似於以下內容:
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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.