Python 时间序列:每个Id号每天平均每小时
我是一个初学者程序员,正在学习python(+pandas),希望我能很好地解释这一点。我有一个超过300万行的大型时间序列pd数据帧,最初有12列,跨越数年。这包括从不同地点(其中350人)购票的人。每行是一个实例(取一张票)。 我搜索了许多问题,如和。但是,我遇到了包含'Id'变量的麻烦。 我希望得到人们每小时、每周一至周五和每站的平均票价。Python 时间序列:每个Id号每天平均每小时,python,pandas,time-series,dataframe,mean,Python,Pandas,Time Series,Dataframe,Mean,我是一个初学者程序员,正在学习python(+pandas),希望我能很好地解释这一点。我有一个超过300万行的大型时间序列pd数据帧,最初有12列,跨越数年。这包括从不同地点(其中350人)购票的人。每行是一个实例(取一张票)。 我搜索了许多问题,如和。但是,我遇到了包含'Id'变量的麻烦。 我希望得到人们每小时、每周一至周五和每站的平均票价。 我有以下设置,将datetime设置为索引: Id Start_date Count Day_name_no 1
我有以下设置,将datetime设置为索引:
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\u 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:
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、每道指、每小时的平均值。想要得到这个:
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函数,然后使用how='sum'函数。谢谢@Def\u Os。我做了一个编辑,试图使问题更清楚一点。我做的事情和你发布的非常相似,但只得到了“1”。我想它是把所有的1加起来,除以和,得到平均值1。我希望这次编辑能让我想做的事情更清楚一点。谢谢