gpt4 book ai didi

python - 如何使用 Pandas 在时间序列中插入经纬度点

转载 作者:太空宇宙 更新时间:2023-11-04 06:41:16 24 4
gpt4 key购买 nike

我有一个带有日期时间字段、ID 字段和纬度和经度列的 Pandas 数据框。它描述了随时间推移的移动点:

         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,通过每秒添加行来填充日期字段中的“空白”,以及经纬度点移动位置的插值,假设它随着乌鸦飞行而移动点之间(不考虑地球曲率)

我目前拥有的是:

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 似乎在我有数据的点之间沿直线移动。

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

最佳答案

我相信您正在寻找方法 .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 引用 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html .

关于python - 如何使用 Pandas 在时间序列中插入经纬度点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45084123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com