python pandas:在包含多个用户的DataFrame中按用户计算差异
我有一个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
来分组,然后再用 diff
。groupby
会把行分成不同的组,这一点是显而易见的:
>>> 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
需要注意的是,我们没有对时间戳进行排序,所以如果你想要排序的话,就得自己手动去做。