Панды рассчитывают разницу на основе показателей, сгруппированных по столбцу с дублированной сгруппированной парой - PullRequest
0 голосов
/ 31 мая 2018

Вот пример.

a b k c
0 0 0 0
0 1 1 0
0 2 0 0
0 3 0 0 
0 4 1 0
0 5 0 0
0 0 0 1
0 1 1 1
0 2 0 1
0 3 0 1 
0 4 1 1
0 5 0 1
1 0 0 0
1 1 1 0
1 2 0 0
1 3 1 0
1 4 0 0
1 0 0 1
1 1 1 1
1 2 0 1
1 3 1 1
1 4 0 1

Здесь «a» - это идентификатор пользователя, «b» - время, «c» - продукт, а «k» - флаг двоичного индикатора.Для каждого c «b» является последовательным, и двоичный флаг «k» уникальной пары (a, b) одинаков, что означает, что он не зависит от «c».Я хочу получить следующее:

a b k c diff_b
0 0 0 0 nan
0 1 1 0 nan
0 2 0 0 1
0 3 0 0 2
0 4 1 0 3
0 5 0 0 1
0 0 0 1 nan
0 1 1 1 nan
0 2 0 1 1
0 3 0 1 2
0 4 1 1 3
0 5 0 1 1
1 0 0 0 nan
1 1 1 0 nan
1 2 0 0 1
1 3 1 0 2
1 4 0 0 1
1 0 0 1 nan
1 1 1 1 nan
1 2 0 1 1
1 3 1 1 2
1 4 0 1 1

Итак, diff_b - это переменная разницы во времени.Показывает продолжительность между текущим моментом времени и последним моментом времени с действием.Если до этого никогда не было действия, возвращается nan.Этот diff_b сгруппирован по.Для каждого пользователя этот diff_b рассчитывается независимо и для того же пользователя, но для другого продукта, он также должен быть независимым от продукта.

Спасибо.

1 Ответ

0 голосов
/ 31 мая 2018

Вам просто нужно добавить c в индикатор группы на втором шаге

df['New']=df.b.loc[df.k==1]# get all value b when k equal to 1
df.New=df.groupby(['a','c']).New.apply(lambda x : x.ffill().shift()) # fillna by froward method , then we need shift.
df.b-df['New']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...