Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何利用pandas插值时间序列中的lat长点_Python_Pandas_Interpolation - Fatal编程技术网

Python 如何利用pandas插值时间序列中的lat长点

Python 如何利用pandas插值时间序列中的lat长点,python,pandas,interpolation,Python,Pandas,Interpolation,我有一个pandas数据框,其中有一个datetime字段、一个ID字段和纬度和经度列。它描述了随时间移动的点: Date ID Lat Lon 2017-07-03 00:03:43 f2d8c21d593adcb5423127923d63c7b3 39.90459 -75.12544 2017-07-03 00:06:49 f2d8c21d593adcb5423127923d6

我有一个pandas数据框,其中有一个datetime字段、一个ID字段和纬度和经度列。它描述了随时间移动的点:

         Date                               ID           Lat       Lon
2017-07-03 00:03:43  f2d8c21d593adcb5423127923d63c7b3  39.90459 -75.12544
2017-07-03 00:06:49  f2d8c21d593adcb5423127923d63c7b3  39.91282 -75.17551
2017-07-03 00:09:56  f2d8c21d593adcb5423127923d63c7b3  39.93888 -75.19702
2017-07-03 00:13:03  f2d8c21d593adcb5423127923d63c7b3  39.96759 -75.18911
2017-07-03 00:16:09  f2d8c21d593adcb5423127923d63c7b3  40.00141 -75.19462
我的数据帧有多个ID,每个ID描述一个不同的对象。我要做的是,对于每个ID,通过每秒添加行来填充日期字段中的“间隙”,以及对lat long点移动的位置进行插值,假设它在点之间飞行(不考虑地球的曲率)

到目前为止,我得到的是:

idlist = df['ID'].unique() #create list of all ids
for x in idlist:
    temp = df.loc[df['ID']==x] #iterate of smaller sub-dataframe for each ID
    temp['Date'] = pd.to_datetime(temp['Date'])
    mindate = temp['Date'].min()
    maxdate = temp['Date'].max()
    idx = pd.date_range(mindate, maxdate,freq='s') #create new second index
    temp = temp.set_index('Date')
    temp = temp.reindex(idx, fill_value=0)
    temp.loc[temp['ID']==0, 'TripID'] = x
    print(temp)
    break
这让我走了一段路

                                             TripID       Lat       Lon
2017-07-03 00:03:43  f2d8c21d593adcb5423127923d63c7b3  39.90459 -75.12544
2017-07-03 00:03:44  f2d8c21d593adcb5423127923d63c7b3   0.00000   0.00000
2017-07-03 00:03:45  f2d8c21d593adcb5423127923d63c7b3   0.00000   0.00000
2017-07-03 00:03:46  f2d8c21d593adcb5423127923d63c7b3   0.00000   0.00000
2017-07-03 00:03:47  f2d8c21d593adcb5423127923d63c7b3   0.00000   0.00000
...
2017-07-03 00:16:08  f2d8c21d593adcb5423127923d63c7b3   0.00000   0.00000
2017-07-03 00:16:09  f2d8c21d593adcb5423127923d63c7b3  40.00141 -75.19462
我需要弄清楚如何填充Lat和Lon的位置,它们等于0,这样ID似乎在我有数据的点之间沿直线移动

这是我不确定的部分。任何见解都会有所帮助。
一旦我知道如何做,我就可以将所有完成的temp数据帧附加到输出。

我相信您正在寻找方法
.ffill()
。要准备数据,您必须将
data['Lat']
data['Lon']
上的值设置为等于
NA
,以便这些值可以向前填充

data.loc[data['Lat'] == 0, 'Lat'] = None
data.loc[data['Lon'] == 0, 'Lon'] = None #fill NA where equal to zero

data['Lat'] = data['Lat'].ffill()
data['Lon'] = data['Lon'].ffill() #conversly, data['Lon'].fillna(method = 'ffill') should work

这应该会给出所需的输出-如果我误解了问题,请发表评论。有关pandas API,请参阅。

我相信您正在寻找方法
.ffill()
。要准备数据,您必须将
data['Lat']
data['Lon']
上的值设置为等于
NA
,以便这些值可以向前填充

data.loc[data['Lat'] == 0, 'Lat'] = None
data.loc[data['Lon'] == 0, 'Lon'] = None #fill NA where equal to zero

data['Lat'] = data['Lat'].ffill()
data['Lon'] = data['Lon'].ffill() #conversly, data['Lon'].fillna(method = 'ffill') should work

这应该会给出所需的输出-如果我误解了问题,请发表评论。有关熊猫API,请参阅。

对不起,我没有说清楚。我要查找的是填充的NA值,就像id在两个已知位置之间移动一样。在时间上介于两点之间的NA点在地理上也应该是一半。对不起,我没有说得更清楚。我要查找的是填充的NA值,就像id在两个已知位置之间移动一样。在时间上介于两点之间的NA点在地理上也应介于两者之间。