说我有以下值:
money_spent
time
2014-10-06 17:59:40.016000-04:00 1.832128
2014-10-06 17:59:41.771000-04:00 2.671048
2014-10-06 17:59:43.001000-04:00 2.019434
2014-10-06 17:59:44.792000-04:00 1.294051
2014-10-06 17:59:48.741000-04:00 0.867856
我希望每{{}}}秒花费大量资金。更具体地说,对于输出中的每个时间戳,我需要在最后2秒内看到花费 。
当我这样做时:
2
我明白了:
df.resample('2S', how='last')
不我的期望。首先,请注意重新采样的df中的第一个条目是 money_spent
time
2014-10-06 17:59:40-04:00 2.671048
2014-10-06 17:59:42-04:00 2.019434
2014-10-06 17:59:44-04:00 1.294051
2014-10-06 17:59:46-04:00 NaN
2014-10-06 17:59:48-04:00 0.867856
,但那是在时间2.671048
,即使根据原始数据框,没有钱是花了但。怎么可能?
答案 0 :(得分:4)
尝试使用how=np.sum
:
df.resample('2S', how=np.sum, closed='left', label='right')
修改强>:
至于closed
和label
:
表示:从左闭区间开始,并用间隔右端的日期标记。 (2秒,例如[1,1.2,1.5,1.9,2))。 并从docs:
关闭:{'右','左'} bin间隔的哪一边被关闭
label:{'right','left'}使用
标记存储桶的bin边缘标签
答案 1 :(得分:1)
您可以将事件添加到框架中,这样每一美元花费的时间将在两秒后离开系统;那么你所需要的只是累积总和;
两个事件有可能重叠;在这种情况下,在最后一步之后,您需要.drop_duplicate
时间索引,为money_spent
的每个重复值取time
的最后一个值:
>>> df
money_spent
time
2014-10-06 21:59:40.016000 1.832
2014-10-06 21:59:41.771000 2.671
2014-10-06 21:59:43.001000 2.019
2014-10-06 21:59:44.792000 1.294
2014-10-06 21:59:48.741000 0.868
>>> xdf = df.copy() # make a copy of the original frame
>>> xdf['money_spent'] *= -1 # negate the value of `money_spent`
>>> xdf.index += np.timedelta64(2, 's') # move the time span 2 seconds
现在,concat
使用原始框架sort_index
并找到累积总和:
>>> pd.concat([df, xdf]).sort_index().cumsum()
money_spent
2014-10-06 21:59:40.016000 1.832e+00
2014-10-06 21:59:41.771000 4.503e+00
2014-10-06 21:59:42.016000 2.671e+00
2014-10-06 21:59:43.001000 4.690e+00
2014-10-06 21:59:43.771000 2.019e+00
2014-10-06 21:59:44.792000 3.313e+00
2014-10-06 21:59:45.001000 1.294e+00
2014-10-06 21:59:46.792000 -4.441e-16
2014-10-06 21:59:48.741000 8.679e-01
2014-10-06 21:59:50.741000 -4.441e-16
有一个浮点精度错误显示为非常小的值,如-4.441e-16
,否则数字对我来说是正确的:
>>> _['money_spent'].round(15)
2014-10-06 21:59:40.016000 1.832
2014-10-06 21:59:41.771000 4.503
2014-10-06 21:59:42.016000 2.671
2014-10-06 21:59:43.001000 4.690
2014-10-06 21:59:43.771000 2.019
2014-10-06 21:59:44.792000 3.313
2014-10-06 21:59:45.001000 1.294
2014-10-06 21:59:46.792000 -0.000
2014-10-06 21:59:48.741000 0.868
2014-10-06 21:59:50.741000 -0.000
Name: money_spent, dtype: float64
答案 2 :(得分:0)
返回数组中的第一个元素是2.67的原因是您使用last
方法对how
重新取样数据。如果您想要更改为第一个重新采样点的读取位置1.832128
,请使用how='first'
kwarg。