#python #pandas #rolling-computation #periodicity
#python #pandas #переход-вычисление #периодичность
Вопрос:
Возможно ли включить значения начального и конечного индексов в при использовании 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
Спасибо за любую помощь в попытке достичь этого!
Комментарии:
1. Имело бы больше смысла, если бы последний был
9, 4, 1
2. @Erfan да, и правильно 🙂
Ответ №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
Но опять же, обязательно ли нам писать максимально чистый код? 🙂