我是使用Python的新手,所以我需要帮助。
我有四个列的两个DataFrame中的数据:纬度、经度、日期时间和温度。
在DataFrame df2中,我有纬度、经度和日期时间,并且我需要使用df1中的数据来插值温度。
我需要使用坐标和日期时间数据进行插值,但我不知道如何做到这一点。
DataFrame示例:
df1:
lat | lon | Datetime | temp
---------------------------------------------------
15.13 | 38.52 | 2019-03-09 16:05:07 | 23
12.14 | 37.536 | 2019-03-15 09:50:07 | 22
13.215 | 39.86 | 2019-03-09 11:03:47 | 21
11.1214 | 38.536 | 2019-03-10 16:41:18 | 22
12.14 | 37.536 | 2019-03-09 06:15:27 | 19
df2:
lat | lon | Datetime
---------------------------------------------
13.13 | 38.82 | 2019-03-06 04:05:07
11.14 | 36.36152 | 2019-03-15 19:51:07
10.214 | 39.123 | 2019-03-19 11:01:08
12.14 | 37.536 | 2019-03-10 16:15:27
我需要使用哪种方法或函数?
发布于 2019-06-04 04:22:09
处理时间插值的最好方法是将过去参考点的时间转换为总秒数。然后,您可以插值所有的值,就像它们是浮点数一样。
以下是您的输入数据帧df1和df2:
df1 = pd.DataFrame({'lat':[15.13,12.14,13.215,11.1214,12.14],
'lon': [38.52, 37.536,39.86,38.536,37.536],
'Datetime': pd.to_datetime(['2019-03-09 16:05:07','2019-03-15 09:50:07','2019-03-09 11:03:47','2019-03-10 16:41:18','2019-03-09 06:15:27']),
'temp':[23,22,21,22,19]})
df2 = pd.DataFrame({'lat':[13.13,11.14,10.214,12.14],
'lon': [38.82, 36.36152,39.123,37.536],
'Datetime': pd.to_datetime(['2019-03-06 04:05:07 ','2019-03-15 19:51:07','2019-03-19 11:01:08','2019-03-10 16:15:27'])})
以下是如何将时间转换为浮点数,基于过去参考点的秒数:
df1['seconds'] = df1.Datetime.apply(lambda x: (pd.to_datetime(x)-pd.to_datetime('2019-03-01 00:00:00')).total_seconds())
df2['seconds'] = df2.Datetime.apply(lambda x: (pd.to_datetime(x)-pd.to_datetime('2019-03-01 00:00:00')).total_seconds())
最后,您可以使用scipy或任何其他包中的插值函数,使用经度、经度和秒数列进行插值(请注意,df2中的一些点超出了df1中定义的范围,因此得到的是nans ):
from scipy.interpolate import griddata
griddata((df1.loc[:,['lat','lon','seconds']].values),
df1.iloc[:,3].values,
(df2.iloc[:,[0,1,3]].values))
https://stackoverflow.com/questions/56430069
复制相似问题