了解每个用户的位置时间:使用班次功能

时间:2018-10-29 15:23:48

标签: python python-3.x pandas

我正在查看以下内容,以计算出每个用户在每个位置花费的时间。

效果很好,但问题是显示-4.0的行。这是一个新用户,这是他们被识别出的第一个国家-直到我看到他们移居国家之前,我无法计算他们到该位置的时间长度。

对于每个用户的第一个位置,我需要将结果设置为用户1的NaN。

这可能吗?

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 :(得分:2)

您可以用groupby来检查diff

df.groupby(level=0).diff()

答案 1 :(得分:0)

如果要使用.shift方法,则需要首先创建一个掩码,以检查userid是否相同。由于未为非DateTimeIndex实现.shift,因此您可以退回到numpynp.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