[英]Time series: Mean per hour per day per Id number
我是一個有點初學者的程序員,正在學習 python (+pandas),希望我能很好地解釋這一點。 我有一個超過 300 萬行的大型時間序列 pd 數據框,最初有 12 列跨越數年。 這包括從 ID 號(其中 350 個)表示的不同地點取票的人。 每行是一個實例(一張票)。 我搜索了許多問題,例如每天每小時計算記錄數和幾年內每小時平均數。 但是,我遇到了包含“Id”變量的麻煩。 我正在尋找人們每小時、一周中的每一天(周一至周五)和每個車站的平均價值。
我有以下內容,將日期時間設置為索引:
Id Start_date Count Day_name_no
149 2011-12-31 21:30:00 1 5
150 2011-12-31 20:51:00 1 0
259 2011-12-31 20:48:00 1 1
3015 2011-12-31 19:38:00 1 4
28 2011-12-31 19:37:00 1 4
使用groupby
和Start_date.index.hour
,我似乎無法包含“Id”。
我的替代方法是將日期分開一小時並具有以下內容:
Id Count Day_name_no Trip_hour
149 1 2 5
150 1 4 10
153 1 2 15
1867 1 4 11
2387 1 2 7
然后我首先得到計數:
Count_Item = TestFreq.groupby([TestFreq['Id'], TestFreq['Day_name_no'], TestFreq['Hour']]).count().reset_index()
Id Day_name_no Trip_hour Count
1 0 7 24
1 0 8 48
1 0 9 31
1 0 10 28
1 0 11 26
1 0 12 25
然后使用 groupby 並表示:
Mean_Count = Count_Item.groupby(Count_Item['Id'], Count_Item['Day_name_no'], Count_Item['Hour']).mean().reset_index()
但是,由於平均值不正確,這並沒有給出預期的結果。 我希望我已經清楚地解釋了這個問題。 我正在尋找每個 ID 每天每小時的平均值,因為我計划在對這些組應用預測模型之前進行聚類以將我的數據集分成組。
任何幫助將不勝感激,如果可能的話,請解釋我在代碼方面或我的方法上做錯了什么。
提前致謝。
我已經編輯了這個,試圖讓它更清楚一點。 寫一個缺乏睡眠的問題可能是不可取的。 我開始的玩具數據集:
Date Id Dow Hour Count
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
12/12/2014 1234 0 9 1
19/12/2014 1234 0 9 1
19/12/2014 1234 0 9 1
19/12/2014 1234 0 9 1
26/12/2014 1234 0 10 1
27/12/2014 1234 1 11 1
27/12/2014 1234 1 11 1
27/12/2014 1234 1 11 1
27/12/2014 1234 1 11 1
04/01/2015 1234 1 11 1
我現在意識到我必須先使用日期並得到類似的東西:
Date Id Dow Hour Count
12/12/2014 1234 0 9 5
19/12/2014 1234 0 9 3
26/12/2014 1234 0 10 1
27/12/2014 1234 1 11 4
04/01/2015 1234 1 11 1
然后計算每個 Id、每個 Dow、每小時的平均值。 並想得到這個:
Id Dow Hour Mean
1234 0 9 4
1234 0 10 1
1234 1 11 2.5
我希望這使它更清楚一點。 我的真實數據集跨越 3 年,包含 300 萬行,包含 350 個 ID 號。
你的問題不是很清楚,但我希望這會有所幫助:
df.reset_index(inplace=True)
# helper columns with date, hour and dow
df['date'] = df['Start_date'].dt.date
df['hour'] = df['Start_date'].dt.hour
df['dow'] = df['Start_date'].dt.dayofweek
# sum of counts for all combinations
df = df.groupby(['Id', 'date', 'dow', 'hour']).sum()
# take the mean over all dates
df = df.reset_index().groupby(['Id', 'dow', 'hour']).mean()
您可以使用“Id”列使用 groupby 函數,然后將resample函數與 how=“sum”一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.