Тестовые данные
df = pd.DataFrame(
{
'date': [1, 2, 3, 1, 2, 3],
'user': ['a', 'a', 'a', 'b', 'b', 'b'],
'value': [1, 2, 3, 2, 4, 6]
}
Получить результат:
df.apply(lambda x: np.sum([df[(df.user == x.user) & (df.date == each)].iloc[0].value for each in range(1, x.date + 1)]) / x.date
, axis=1)
Если у вас отсутствуют данные (данные за одну неделю, но нет данных за предыдущую):
df.apply(
lambda x: np.sum(
[df[(df.user == x.user) & (df.date == each)].iloc[0].value
if df[(df.user == x.user) & (df.date == each)].shape[0] is not 0 else 0
for each in range(1, x.date + 1)]) / x.date, axis=1)
Возможно, вы захотите переписать это как функцию, читаемость этого кода плохая.