熊猫的滚动差异

新手上路,请多包涵

有谁知道一个有效的函数/方法,例如 pandas.rolling_mean ,它可以计算数组的滚动差异

这是我最接近的解决方案:

 roll_diff = pd.Series(values).diff(periods=1)

但是,它只计算单步滚动差异。理想情况下,步长是可编辑的(即当前时间步长和最后 n 个步长之间的差异)。

我也写过这个,但是对于更大的数组,它很慢:

 def roll_diff(values,step):
    diff = []
    for i in np.arange(step, len(values)-1):
        pers_window = np.arange(i-1,i-step-1,-1)
        diff.append(np.abs(values[i] - np.mean(values[pers_window])))
    diff = np.pad(diff, (0, step+1), 'constant')
    return diff

原文由 William Baker Morrison 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 388
2 个回答

关于什么:

 import pandas

x = pandas.DataFrame({
    'x_1': [0, 1, 2, 3, 0, 1, 2, 500, ],},
    index=[0, 1, 2, 3, 4, 5, 6, 7])

x['x_1'].rolling(window=2).apply(lambda x: x.iloc[1] - x.iloc[0])

通常,您可以将 lambda 函数替换为您自己的函数。请注意,在这种情况下,第一项将为 NaN

更新

定义以下内容:

 n_steps = 2
def my_fun(x):
    return x.iloc[-1] - x.iloc[0]

x['x_1'].rolling(window=n_steps).apply(my_fun)

您可以计算 n_steps 值之间的差异。

原文由 Pierluigi 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您直接在底层 numpy 数组上工作,则可以执行与 https://stackoverflow.com/a/48345749/1011724 中相同的操作:

 import numpy as np
diff_kernel = np.array([1,-1])
np.convolve(rs,diff_kernel ,'same')

其中 rs 是你的熊猫系列

原文由 Dan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏