0

是否可以在使用rolling函数时包含开始和结束索引值,pandas以使系列的值是周期性的?

例如,我有以下Series实例:

import pandas as pd
timestamps = [1, 2, 3, 4]
quantities = [1, 16, 9, 4]
series = pd.Series(quantities, index=timestamps)

当我输入:

series.rolling(window=3, min_periods=3, center=True).median()

产量:

1    NaN
2    9.0
3    9.0
4    NaN
dtype: float64

但是,我想在计算中包括该系列的任一端,以便结果为:

1    median([4, 1, 16])   4.0
2    median([1, 16, 9])   9.0
3    median([16, 9, 4])   9.0
4    median([9, 4, 1])    4.0
dtype: float64

感谢您尝试实现这一目标的任何帮助!

4

1 回答 1

1

我们可以用第一个和最后一个元素扩展列表,然后计算滚动中位数。之后,我们dropna将系列分配回来

不会为最漂亮的代码赢得价格,但它确实有效。想不出别的办法。

quantities2 = quantities.copy()
quantities2.insert(0, quantities2[-1])
quantities2.insert(len(quantities2), quantities2[0])
print(quantities2)

[4, 1, 16, 9, 4, 4]
series = pd.Series(quantities2)
series = pd.Series(series.rolling(window=3, min_periods=3, center=True).median().dropna(), index=timestamps)

print(series)
1    4.0
2    9.0
3    9.0
4    4.0
dtype: float64

但是话又说回来,我们必须编写最干净的代码吗?:)

于 2019-04-05T00:12:58.583 回答