【问题标题】:DataFrame time interval extrapolationDataFrame时间间隔外推
【发布时间】:2020-07-28 09:08:16
【问题描述】:

我有一个DataFrame,间隔 10 分钟,看起来像这样:

    intervall_start         group   count
0   2014-03-05 14:30:00     A       2
1   2014-03-05 14:40:00     A       2
2   2014-03-05 14:50:00     B       2
3   2014-03-05 15:00:00     B       1
4   2014-03-05 15:10:00     A       4
5   2014-03-05 15:20:00     B       1

我现在的目标是将这 10 分钟的时间间隔推断为 15 分钟、30 分钟或 1 小时的时间间隔。我想设置应该外推 10 分钟间隔的时间间隔。所以应该是动态的!

假设我想将 10 分钟的时间间隔外推为 15 分钟的时间间隔,然后我想得到这个结果。

    intervall_start         group   count
0   2014-03-05 14:30:00     A       (10/15 * 2 + 5/15 * 2) = 2
1   2014-03-05 14:45:00     A       (5/15 * 2 + 10/15 * 0) = 0.666
2   2014-03-05 15:00:00     A       (10/15 * 4 + 5/15 * 0) = 2.666
3   2014-03-05 15:15:00     A       (5/15 * 4 + 10/15 * 1) = 2

    intervall_start         group   count
0   2014-03-05 14:45:00     B       (5/15 * 0 + 10/15 * 2) = 1.333
1   2014-03-05 15:00:00     B       (10/15 * 1 + 5/15 * 0) = 0.666
2   2014-03-05 15:15:00     B       (5/15 * 0 + 10/15 * 1) = 0.666

你们知道怎么做吗?但正如我所说,动态!我还希望能够将其转换为 5 分钟或 1 小时的间隔!

为什么我使用10/155/15 作为权重?因为这是 15 分钟间隔的权重。例如,如果我从 15:00 到 15:10 有 3 个计数,那么这是 10/15 * 3 重量!

计数说明:

我会在我的数据库中计算该组的大门是打开还是关闭。 1打开,0关闭。我只是选择打开的门(1)并计算它们。所以,我知道这群人开了多少门!

现在我不能把这些数字加起来!因为否则我会打开更多的门,然后我实际上有!我必须计算在该时间范围内打开的门的平均值!

诚挚的问候,谢谢!

【问题讨论】:

    标签: python pandas dataframe time-series date-range


    【解决方案1】:

    我相信你要找的是resample

    # Create a date-time index
    df.intervall_start = pd.to_datetime(df.intervall_start)
    df.set_index("intervall_start", inplace = True)
    
    # make sure we have a sample every 10 minutes (fill missing samples with 0)
    df = df.groupby("group")[["count"]].resample("10min").asfreq()
    df = df.fillna(0)
    
    # sample every minute, to be later used when calculatiung the mean per period
    df = df.reset_index(level = "group").groupby("group")[["count"]].resample("1min").pad()
    
    # resample for every 15 minutes using 'mean'
    df = df.reset_index(level = "group").groupby("group")[["count"]].resample("15min").mean()
    

    输出是:

                                  count
    group intervall_start              
    A     2014-03-05 14:30:00  2.000000
          2014-03-05 14:45:00  0.666667
          2014-03-05 15:00:00  0.363636
    B     2014-03-05 14:45:00  2.000000
          2014-03-05 15:00:00  0.666667
          2014-03-05 15:15:00  0.166667
    

    【讨论】:

    • 我收到 Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex' 错误
    • 知道了。我认为它已经是一个日期索引。添加了相关代码以使其如此。
    • 这与我想要的很接近。现在的问题是计数错误!它不应该总结它应该计算平均数!
    • 嗯。输出中的计数总和似乎与输入中的相同 - 至少对于问题中的示例。不是吗?
    • 哦对不起...我的错。是的,总和是一样的,但我描述错了!计数不应相加,应计算平均值。你知道我的意思吗?
    猜你喜欢
    • 2021-08-21
    • 2021-06-20
    • 2018-04-22
    • 2014-02-17
    • 2014-02-26
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    相关资源
    最近更新 更多