我有一组相对较大(约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)
我认为基本过程是:
我知道我可以用
遍历每个idfor name, group in df.groupby('id'):
并且策划不是问题,但我不确定其余部分。
经过一些搜索后,我找不到任何好方法来为每个组中的单个值做到这一点。其他答案建议使用重新采样和插值函数,但这对于我拥有的数据大小会花费太长时间,并且会进行大量不必要的计算,因为我只需要一个点。
答案 0 :(得分:1)
目前还不是很清楚你想要什么,但让我们从一些事情开始
首先,您可能需要唯一ID列表,对吗?
import pandas as pd
import numpy as np
df = ...
unids = np.unique(df[['id']])
for id in unids:
df_id = # subset df by id, filtering out rows by id, and get back dataframe
# sort new df by Timestamp
tmin = new_df['Timestamp'][0]
tmax = new_df['Timestamp'][-1]
tstep = ... # time step
position = []
for t in range(tmin, tmax, tstep):
# interpolate
# add to position
plot(position)
这看起来合理吗?