【发布时间】:2015-01-12 22:01:10
【问题描述】:
熊猫新手,我正在尝试获得具有固定窗口大小的滚动平均值。但我有 2 个代表时间戳元组和值的列表。我希望前者用作后者的重量。我还想确保数据中的空白是可识别的(时间戳不一定是连续的)。
示例列表:
ts = [(1415969999, 1415970014), (1415970014, 1415970030), (1415970030, 1415970045), (1415970045, 1415970060), (1415970060, 1415970075), (1415970075, 1415970090), (1415970090, 1415970105), (1415970105, 1415970120), (1415970120, 1415970135), (1415970135, 1415970150), (1415970150, 1415970165), (1415970165, 1415970181), (1415970181, 1415970286), (1415970286, 1415970301), (1415970301, 1415970316)...]
values = [8.0, 13.0, 11.75, 7.0, 8.5, 16.0, 16.0, 6.5, 4.0, 8.25, 5.5, 1.0, 0.0, 0.5, 0.5, 0.0, 0.25, 0.0, 0.25, 0.0, 0.5, 0.0, 2.25, 0.0, 0.25, 0.0, 0.25, 0.0, 1.0, 0.25, 0.25, 0.0, 0.25, 0.0, 0.5, 0.25, 0.0, 1.0, 0.0, 0.5...]
我现在用的是:
pandas_series = pd.Series(values)
window_averages = pd.rolling_mean(pandas_series, window=90) # 90 would be seconds here
但这并没有考虑到权重。我看过here 和here 但不能完全拼凑在一起。
编辑
我设法得到了我想要的,但我不认为解决方案是最佳的。它在底部几乎显示了我需要的输入,并包括数据中的空白(我现在在这里用 -1 表示)
import pandas as pd
data = [(1415970014, 1415970030, 13.0), (1415970033, 1415970048, 11.75), (1415970048, 1415970053, 3.2)]
start_range = data[0][0]
end_range = data[len(data)-1][1]-1
previous_end_time = start_range
values = []
for t in data:
start_ts, end_ts, value = t
empties = []
while start_ts > previous_end_time:
empties.append(previous_end_time)
values.append(-1)
previous_end_time += 1
window_length = end_ts-start_ts
values += [value]*window_length
previous_end_time = end_ts
s_range_datetime_start = pd.to_datetime(start_range, unit='s')
s_range_datetime_end = pd.to_datetime(end_range, unit='s')
period_range = pd.period_range(s_range_datetime_start, s_range_datetime_end, freq='s')
series = pd.Series(values, period_range)
print series
然后产生以下内容,基本上是在 1 秒内推断数据。
2014-11-14 13:00:14 13.00
2014-11-14 13:00:15 13.00
2014-11-14 13:00:16 13.00
2014-11-14 13:00:17 13.00
2014-11-14 13:00:18 13.00
2014-11-14 13:00:19 13.00
2014-11-14 13:00:20 13.00
2014-11-14 13:00:21 13.00
2014-11-14 13:00:22 13.00
2014-11-14 13:00:23 13.00
2014-11-14 13:00:24 13.00
2014-11-14 13:00:25 13.00
2014-11-14 13:00:26 13.00
2014-11-14 13:00:27 13.00
2014-11-14 13:00:28 13.00
2014-11-14 13:00:29 13.00
2014-11-14 13:00:30 -1.00
2014-11-14 13:00:31 -1.00
2014-11-14 13:00:32 -1.00
2014-11-14 13:00:33 11.75
2014-11-14 13:00:34 11.75
2014-11-14 13:00:35 11.75
2014-11-14 13:00:36 11.75
2014-11-14 13:00:37 11.75
2014-11-14 13:00:38 11.75
2014-11-14 13:00:39 11.75
2014-11-14 13:00:40 11.75
2014-11-14 13:00:41 11.75
2014-11-14 13:00:42 11.75
2014-11-14 13:00:43 11.75
2014-11-14 13:00:44 11.75
2014-11-14 13:00:45 11.75
2014-11-14 13:00:46 11.75
2014-11-14 13:00:47 11.75
2014-11-14 13:00:48 3.20
2014-11-14 13:00:49 3.20
2014-11-14 13:00:50 3.20
2014-11-14 13:00:51 3.20
2014-11-14 13:00:52 3.20
我的想法是在这个时间段上应用滚动平均值。
【问题讨论】: