1

複数のユーザーからのタイムスタンプ付きイベントを含むパンダDataFrameがあります。デフォルトでは、DataFrameはタイムスタンプでソートされます。

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

パンダでこれを行うためのクリーンな方法はありますか?理想的にはユーザーで並べ替えることはありませんか?ありがとう!

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 に答える