2015-12-01 37 views
1

予具有相对大的(〜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分十一秒,他们应该是点(使内插如下所述:Pandas data frame: resample with linear interpolation)之间的方式1/40

我想的基本过程是:

  • 通过每个ID循环:
    • 获得该ID的过滤器数据
    • 在时间之前得到最后的位置(例如,在8:31:11之前的最后记录的位置,或者任何时间被使用)
    • 获得第一个位置(例如在8:31:11之后的第一个记录位置,或者任何时间被使用)
    • 插值到数字出它们在该第二
    • 添加位置,其中列出每个ID的位置
  • 情节名单

我知道我可以遍历每个ID与

for name, group in df.groupby('id'): 

和绘图不是问题,但我不确定其余的。

经过一番搜索,我还没有找到任何好办法来做到这一点从每个组的单个值。其他答案建议使用resample和内插函数,但是对于我所拥有的数据量来说,这会花费太长时间,并且会看到很多不必要的计算,因为我只需要一个点。

回答

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) 

这看起来合理吗?

+0

我增加了更多的问题,希望能够更好地解释它。基本上,我想在某个特定时间(例如上午10点30分14秒)为每个人点1分,但不太可能存在与那段时间完全一致的数据。所以我想我需要在10:30:14之前和10:30:14之后获取数据并进行插值。尽管每个人的数据都是一整天。 – Jezzamon