Pandas dataframe groupby / rolling - почему нет сброса скользящего среднего значения для новой группы? - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь суммировать рабочие часы для группы людей и мне нужно вычислить скользящее среднее.

Я могу сделать это с помощью df.groupby и df.rolling, но для скользящего среднего значения 'n' я ожидаю, что первые значения n-1 в группе будут nan или 0.

Пример -

import pandas as pd
import numpy as np

employees = ['Alice', 'Alice', 'Bob', 'Bob', 'Bob' ]
weeks = [2, 3, 2, 3, 4]
hours = [5, 8, 4, 2, 5]

df = pd.DataFrame.from_dict({'employee' : employees,
        'week': weeks,
       'hours': hours})
       
df.groupby(['employee', 'week']).sum().rolling(2).mean()

df

 	employee 	hours 	week
0 	Alice 	5 	2
1 	Alice 	8 	3
2 	Bob 	4 	2
3 	Bob 	2 	3
4 	Bob 	5 	4

Результат -

           hours
employee week       
Alice    2       NaN
     3       6.5
Bob      2       6.0  <-- expect this to be 0
     3       3.0
     4       3.5

Ожидаемый результат

           hours
employee week       
Alice    2       NaN
     3       6.5
Bob      2       NaN  <--- mean reset to 0 on new group
     3       3.0
     4       3.5

Этот сброс (1-й ряд Боба) не происходит. Как я могу это сделать?

Большое спасибо (и apols за форматирование)

1 Ответ

0 голосов
/ 12 марта 2019

Вы ищете

s=df.groupby(['employee']).apply(lambda x : x['hours'].rolling(2).mean())
s
Out[225]: 
employee   
Alice     0       nan
          1   6.50000
Bob       2       nan
          3   3.00000
          4   3.50000
Name: hours, dtype: float64

# assign it back 
df['roll_mean']=s.reset_index(level=0,drop=True) 
...