Вычисление медианы динамических временных рядов

#python #pandas

#python #pandas

Вопрос:

Если у меня есть серия pandas [a1, a2, a3,a4, …] с длиной = T. Каждое значение соответствует одному дню. Для каждого дня я хотел бы вычислить историческую медиану. Например, в первый день вычислите медиану [a1]; на второй день вычислите медиану [a1, a2]; на n-й день вычислите медиану [a1, a2, …, an]. Наконец, я хотел бы также получить ряд с длиной = T . Есть ли у нас эффективный способ сделать это в pandas? Спасибо!

Ответ №1:

Для ряда, ser :

 ser = pd.Series(np.random.randint(0, 100, 10))
  

Если ваша версия pandas 0.18.0 или выше, используйте:

 ser.expanding().median()
Out: 
0     0.0
1    25.0
2    50.0
3    36.5
4    33.0
5    36.0
6    33.0
7    36.0
8    33.0
9    36.0
dtype: float64
  

Следующее предназначено для более ранних версий и устарело:

 pd.expanding_median(ser)
C:Anaconda3envsp3libsite-packagesspyderutilsipythonstart_kernel.py:1: FutureWarning: pd.expanding_median is deprecated for Series and will be removed in a future version, replace with 
        Series.expanding(min_periods=1).median()
  # -*- coding: utf-8 -*-
Out: 
0     0.0
1    25.0
2    50.0
3    36.5
4    33.0
5    36.0
6    33.0
7    36.0
8    33.0
9    36.0
dtype: float64