DataFrame 时间间隔外推

DataFrame time interval extrapolation

我有一个 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 分钟间隔的重量。例如,如果我有 3 个计数,从 15:00 到 15:10 那么这是一个 10/15 * 3 权重!

计数说明:

如果群组的门是打开或关闭的,我会在我的数据库中计算。 1 打开,0 关闭。我只是 select 打开的门 (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