【发布时间】:2020-12-26 23:24:44
【问题描述】:
我正在处理 timeseries 数据。我正在尝试将百分比更改应用于数据。
这是数据的快照:
Time EX SC WH YE Lt Ub Yl_2 Wm Wm_2 value
2016-02-15 11:54:00 UTC 4.4 0.14 8.38 755 232 0.009 0.11 1428 1020 FALSE
2016-02-15 11:55:00 UTC 4.4 0.14 8.38 755 232 0.009 0.111 1436 1018 FALSE
2016-02-15 11:56:00 UTC 4.4 0.14 8.38 755 232 0.014 0.113 1471 1019 FALSE
2016-02-15 11:57:00 UTC 4.4 0.14 8.37 755 232 0.015 0.111 1457 1015 FALSE
2016-02-15 11:58:00 UTC 4.4 0.14 8.38 755 232 0.013 0.111 1476 1019 FALSE
2016-02-15 11:59:00 UTC 4.4 0.14 8.36 755 232 0.013 0.114 1416 1015 FALSE
数据的形状是(122334, 10)
这是我的功能:
def percent_change(series):
# Collect all *but* the last value of this window, then the final value
previous_values = series[:-1]
last_value = series[-1]
# Calculate the % difference between the last value and the mean of earlier values
percent_change = (last_value - np.mean(previous_values)) / np.mean(previous_values)
return percent_change
在这里应用函数:
df2 = df.rolling(10).apply(percent_change)
需要永远,请问我做错了什么?或者我应该怎么做?
谢谢
【问题讨论】:
-
这更适合 SO,所以我投票将其迁移。请注意,您将相同的函数应用于所有列,包括时间和布尔列。应用功能通常很慢,您可能会在不同的列中使用滚动平均值(相当快)+百分比计算来逃避
-
您一遍又一遍地计算累积均值是在浪费许多周期。这是一个针对一系列长度为 $n 的 $O(n^2)$ 算法。累积平均值可以通过累积总和一次性计算出来,需要 $O(n)$ 时间,其中“percent_change " 可以在 $O(n)$ 时间内获得。
标签: time-series python pandas