Python - применить скользящее медиану на основе других значений столбца - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь рассчитать среднее значение для результатов, собранных на нескольких рабочих сессиях.

Мои данные выглядят так:

df = pd.DataFrame(
    {"Session" : [1 ,1, 2, 2, 3, 3],
    "Value" : [1, 2, 3, 4, 5, 6]})

Я хотел бы рассчитать медиану для всех значений в числах скользящих сессий. Как и медиана всех значений для сессий 1 и 2, затем для сессий 2 и 3 ...

Сейчас единственное, что мне удалось сделать, - это вычислить среднее значение медиан, выполнив это:

summary = pd.DataFrame()
summary['median_session'] = df.groupby('Session').Value.median()
summary['mean_last_two_median'] = summary.mean_session.rolling(2).mean()

Но это не совсем верно.

Я пытался:

summary = pd.DataFrame()
summary['mean_two_session'] = df.groupby('Session').rolling(2).median()

но я не получаю то, что мне нужно ...

Может ли кто-нибудь помочь мне с этим? Большое спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

Я не могу представить себе полностью векторизованный способ, поэтому я бы итерировал по уникальным номерам сеансов, чтобы построить новый DataFrame:

resul = pd.DataFrame([[sess, sess+1, df.loc[df['Session'].between(sess, sess+1),
                                            'Value'].median()]
                      for sess in df['Session'].unique()[:-1]],
                     columns=['Session1', 'Session2', 'Median'])

Это дает:

   Session1  Session2  Median
0         1         2     2.5
1         2         3     4.5
...