python pandas:在包含多个用户的DataFrame中按用户计算差异

1 投票
1 回答
989 浏览
提问于 2025-04-17 14:51

我有一个pandas的数据表,里面记录了多个用户的事件时间戳。默认情况下,这个数据表是按时间戳排序的。

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

我想要计算每个用户的时间戳之间的差值。也就是说,对于每个事件,我想知道自从同一个用户上一个事件发生以来,经过了多长时间。

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        ...

有没有简单的方法可以在pandas中做到这一点,最好是不需要按用户排序?谢谢!

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

需要注意的是,我们没有对时间戳进行排序,所以如果你想要排序的话,就得自己手动去做。

撰写回答