我是一个有点初学的程序员和学习python(+ pandas),希望我能够解释得这么好。我有一个超过300万行的大型时间序列pd数据帧,最初有12列,跨越多年。这包括从Id号码(其中350个)表示的不同位置拍票的人。每行是一个实例(一张票)。
我搜索过许多问题,例如counting records per hour per day和getting average per hour over several years。但是,我遇到了将“' 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的平均值。并希望得到这个:
Id Dow Hour Mean
1234 0 9 4
1234 0 10 1
1234 1 11 2.5
我希望这会让它更清晰一些。我的真实数据集跨越3年,有300万行,包含350个Id号码。
答案 0 :(得分:2)
你的问题不是很清楚,但我希望这会有所帮助:
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()
答案 1 :(得分:0)
您可以使用' Id'来使用groupby功能。列,然后使用resample函数和=' sum'。