pandas:以周期性边界滚动
pandas: rolling with periodic boundaries
在 pandas
中使用 rolling
函数时是否可以包含开始和结束索引值,以便序列的值是周期性的?
例如,我有以下 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
感谢您为实现这一目标提供的任何帮助!
我们可以用第一个和最后一个元素扩展列表,然后计算滚动中位数。之后我们 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
但是话又说回来,我们是否必须写cleanest code? :)
在 pandas
中使用 rolling
函数时是否可以包含开始和结束索引值,以便序列的值是周期性的?
例如,我有以下 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
感谢您为实现这一目标提供的任何帮助!
我们可以用第一个和最后一个元素扩展列表,然后计算滚动中位数。之后我们 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
但是话又说回来,我们是否必须写cleanest code? :)