时间序列:每个 ID 号每天每小时的平均值

Time series: Mean per hour per day per Id number

我是一个有点初级的程序员,正在学习 python (+pandas),希望我能很好地解释这一点。我有一个超过 300 万行的大型时间序列 pd 数据框,最初有 12 列跨越多年。这涵盖了从不同地点取票的人,这些地点用身份证号表示(其中 350 个)。每行是一个实例(一张票)。 我搜索了很多类似 counting records per hour per day and 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  

使用 groupbyStart_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 函数,然后使用 how='sum'.

resample 函数