Понимание времени нахождения для каждого пользователя: с помощью функции сдвига - PullRequest
0 голосов
/ 29 октября 2018

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

Работает отлично, но проблема в строке, которая показывает -4.0. Это новый пользователь, и это первая страна, в которой он был идентифицирован - пока я не увижу, как они перемещают страны, я не могу рассчитать, сколько времени они провели в этом месте.

Для первого местоположения каждого пользователя мне нужно, чтобы для результата было установлено значение NaN, как для пользователя 1.

Возможно ли это?

df2['time_in_loc'] = df2['hour'] - df2['hour'].shift(1)
In [36]: df2
Out[36]:
                      hour  hop  time_in_loc
userid      country
82718927392 UK           0    1          NaN
            Spain        2    2          2.0
            Portugal     4    3          2.0
47294872934 India        0    1         -4.0
            UK          15    2         15.0

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если вы хотите использовать метод .shift, вам нужно сначала создать маску, которая проверяет, совпадает ли userid. Поскольку .shift не реализовано для не DatetimeIndex, вы можете вернуться к numpy. np.roll будет перенесен, поэтому мы определяем нашу собственную .shift функцию, которая не переносится.

import numpy as np

def shift(x, n):
        return np.concatenate((np.full(n, np.nan), x[:-n]))

m = shift(df2.index.get_level_values(0), 1) == df2.index.get_level_values(0)
df2.loc[m, 'time_in_loc'] = (df2.hour - df2.hour.shift(1))[m]

Выход:

                      hour  hop  time_in_loc
userid      country                         
82718927392 UK           0    1          NaN
            Spain        2    2          2.0
            Portugal     4    3          2.0
47294872934 India        0    1          NaN
            UK          15    2         15.0
0 голосов
/ 29 октября 2018

Вы можете проверить groupby с помощью diff

df.groupby(level=0).diff()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...