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/15
和 5/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
我有一个 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/15
和 5/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