1

我有一个 pandas DataFrame,其中包含来自多个用户的时间戳事件。默认情况下,DataFrame 按时间戳排序。

uid timestamp other_vars
  1       100        ...
  1       150        ...
  2       150        ...
  2       200        ...
  1       225        ...
  3       300        ...
  3       400        ...

我想得到users中时间戳的差异。也就是说,对于每个事件,我想获取自同一用户生成的上一个事件以来经过的时间。

uid timestamp diff other_vars
  1       100   NA        ...
  1       150   50        ...
  2       150   NA        ...
  2       200   50        ...
  1       225   75        ...
  3       300   NA        ...
  3       400  100        ...

有没有一种干净的方法可以在熊猫中做到这一点,理想情况下不按用户排序?谢谢!

4

1 回答 1

3

如评论中所述,您可以使用groupby. 我会groupby,然后diffgroupby将(不出所料)对行进行分组:

>>> df
   uid  timestamp other_vars
0    1        100        ...
1    1        150        ...
2    2        150        ...
3    2        200        ...
4    1        225        ...
5    3        300        ...
6    3        400        ...
>>> for name, gr in df.groupby("uid"):
...     print name
...     print gr
...     
1
   uid  timestamp other_vars
0    1        100        ...
1    1        150        ...
4    1        225        ...
2
   uid  timestamp other_vars
2    2        150        ...
3    2        200        ...
3
   uid  timestamp other_vars
5    3        300        ...
6    3        400        ...

然后我们在这些组中选择我们感兴趣的列,然后diff它:

>>> df["diff"] = df.groupby("uid")["timestamp"].diff()
>>> df
   uid  timestamp other_vars  diff
0    1        100        ...   NaN
1    1        150        ...    50
2    2        150        ...   NaN
3    2        200        ...    50
4    1        225        ...    75
5    3        300        ...   NaN
6    3        400        ...   100

请注意,我们没有对时间戳进行排序,因此如果您想要,您必须明确地进行。

于 2013-02-05T19:33:54.720 回答