我有一些带有时间戳和位置数据的数据,如下所示:
A 2013-02-05 19:45:00 (39.94, -86.159)
A 2013-02-05 19:55:00 (39.94, -86.159)
A 2013-02-05 20:00:00 (39.777, -85.995)
A 2013-02-05 20:05:00 (39.775, -85.978)
B 2013-02-05 22:20:00 (39.935, -86.159)
B 2013-02-05 22:25:00 (39.935, -86.159)
B 2013-02-05 23:55:00 (39.951, -86.151)
B 2013-02-06 00:00:00 (39.951, -86.151)
B 2013-02-06 00:05:00 (39.906, -86.196)
C 2013-02-06 00:25:00 (39.82, -86.249)
C 2013-02-06 00:30:00 (39.82, -86.249)
C 2013-02-06 02:45:00 (41.498, -81.527)
C 2013-02-06 02:55:00 (41.498, -81.527)
C 2013-02-06 04:35:00 (39.82, -86.249)
C 2013-02-06 04:40:00 (39.82, -86.249)
我需要做的是,对于每个用户每天获取某人连续出现在一个位置的次数的直方图。因此,我想标记每个连续时间段,其中每个用户每天的位置保持不变。
我该如何在 python pandas 中实现这一点?
用户在一天内重复该位置的情况是可能的,如用户 C 所示,该位置(39.82.-86.249)再次出现。因此,这些情况应被视为单独的连续时间。
最佳答案
我认为您正在寻找 pd.Series.shift
x = pd.Series([1, 3, 3, 2, 3, 3])
x
0 1
1 3
2 3
3 2
4 3
5 3
x.shift(-1)
0 3
1 3
2 2
3 3
4 3
5 NaN
(x != x.shift(-1)).sum()
4
假设问题中的数据是输出
df[['COL1', 'COL2', 'COL3']]
然后,这应该可以为您提供每个用户/每天的唯一位置数量。我不确定这是否正是您想要的,但应该有助于入门
df['DATE'] = df.COL2.apply(lambda s: pd.to_datetime(s).date())
df.groupby(['COL1', 'DATE']).apply(lambda sdf: (sdf.COL3 != sdf.COL3).sum())
关于python - 如何可视化在 pandas 中的某个位置花费的连续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15661821/