2016-12-24 6 views
2

У меня есть данные, которые выглядят как этот3 день текущая сумма для каждого пользователя

  time.   user value 
0 2012-01-01 01:01:01 1  1 
1 2012-01-02 01:01:01 1  2 
2 2012-01-04 01:01:01 2  3 
3 2012-01-06 01:01:01 2  1 
4 2012-01-07 01:01:01 2  2 
5 2012-01-08 01:01:01 2  1 
6 2012-01-10 01:01:01 2  2 
7 2012-01-13 01:01:01 2  2 
8 2012-01-14 01:01:01 3  1 
... 

и мне нужно знать, для каждого пользователя, если таковые имеются 3 дневные периоды времени, когда сумма значений в тех 3 дня больше 5. 1 будет представлять да, 0 нет. Результат должен выглядеть следующим образом.

user 3DS 
1  0 
2  1 
3  0 
... 

Я знаю, что есть некоторая комбинация groupby на пользователе с некоторым типом применения, я думаю. Я нашел оконную функцию, которая может быть полезна

3_days = timedelta(days=7) 
lamba x : sum(df['value'][df['time'] <= x['time'] + 3_days]) 

Как использовать панд, чтобы получить второй фрейм данных с пользователями и 3 дня сумма (3DS)?

+0

whats ur question? – Mox

ответ

0

Это похоже на то, что вы можете делать текущую сумму по каждому пользователю.

df_total = df.set_index('time').groupby('user').rolling(3).sum() 
df_total.groupby(level='user').agg(lambda x: x.max() > 5) * 1 
+0

Если записи пользователя разнесены более чем на один день, это не сработает. Иногда появляется пользователь, у которого есть запись один раз в неделю или месяц, поэтому окно должно быть явно 3 дня. – user46207

+0

ОК, ответ был в течение трех дней подряд. Он был изменен на 3 записи подряд и не привязан к календарным дням. –

Смежные вопросы