时间序列:每个身份证号码每小时每天的平均值

时间:2015-05-28 00:10:35

标签: python pandas time-series dataframe mean

我是一个有点初学的程序员和学习python(+ pandas),希望我能够解释得这么好。我有一个超过300万行的大型时间序列pd数据帧,最初有12列,跨越多年。这包括从Id号码(其中350个)表示的不同位置拍票的人。每行是一个实例(一张票)。 我搜索过许多问题,例如counting records per hour per daygetting 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的平均值。并希望得到这个:

    Id  Dow Hour    Mean
    1234    0   9   4
    1234    0   10  1
    1234    1   11  2.5

我希望这会让它更清晰一些。我的真实数据集跨越3年,有300万行,包含350个Id号码。

2 个答案:

答案 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'。