【发布时间】:2016-03-04 20:27:01
【问题描述】:
我有一组相对较大 (~300 MB) 的地理位置数据,格式为
Timestamp, id, type, x, y
具有以下数据类型:
In[7]: df.dtypes
Out[7]:
Timestamp datetime64[ns]
id int64
type object
X int64
Y int64
dtype: object
每个id对应一个特定的用户,每个人全天记录了几百个点。
我想创建一个情节,显示每个人在某一秒的位置。所以我需要为每个 id 加 1 分。但是,数据有些稀疏,不太可能有与那一秒精确相关的数据点。我想通过在最近的两点之间插值来近似。
在数据点之间,我假设人们是线性移动的,所以如果我们知道 8:31:10 和 8:31:50 的位置,那么在 8:31:30 他们应该正好在这两者之间位置,并且在 8:31:11,它们应该是点之间距离的 1/40(因此按此处所述进行插值:Pandas data frame: resample with linear interpolation)
我认为基本流程是:
- 遍历每个 id:
- 获取该 id 的过滤器数据
- 获取时间之前的最后位置(例如,8:31:11 之前的最后记录位置,或使用的任何时间)
- 在某个时间之后获取第一个位置(例如,在 8:31:11 之后的第一个记录位置,或使用的任何时间)
- 插值以确定它们在那一秒的位置
- 将位置添加到列表中
- 每个 id 位置的绘图列表
我知道我可以遍历每个 id
for name, group in df.groupby('id'):
并且绘图不是问题,但我不确定其余的。
经过一番搜索,我没有找到任何好的方法来为每个组中的单个值执行此操作。其他答案建议使用 resample 和 interpolate 函数,但是对于我拥有的数据大小而言,这将花费太长时间,并且会进行很多不必要的计算,因为我只需要一个点。
【问题讨论】:
标签: python numpy pandas matplotlib gis