基于行驶距离和时间的Pandas速度计算

bfnvny8b  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(87)

我有以下dataframe:

data = [
    [ID, '2022-04-23T03:36:26Z', 60, 10, 83],
    [ID, '2022-04-23T03:37:30Z', Nan, Nan, Nan],
    [ID, '2022-04-23T03:37:48Z', Nan, Nan, Nan],
    [ID, '2022-04-23T03:38:24Z', 61, 11, 72],
    [ID, '2022-04-23T03:44:20Z', 63, 13, 75],
    [ID, '2022-04-23T03:45:02Z', Nan, Nan, Nan],
    [ID, '2022-04-23T03:45:06Z', Nan, Nan, Nan],
    [ID, '2022-04-23T03:45:08Z', Nan, Nan, Nan],
    [ID, '2022-04-23T03:45:12Z', Nan, Nan, Nan],
    [ID, '2022-04-23T03:45:48Z', 69, 15, 61]
]

df = pd.DataFrame(data=data,
                  columns=['ID', 'time', 'latitude', 'longitude', 'speed')

问题是,对于某些行,我只有时间值,例如。第二排和第三排对于这些行,我想根据时间、纬度和经度计算Nan速度行的前一行(第1行)和后一行(第4行)的平均速度
例如,行2和行3中的速度值应当是基于行进距离(可以使用半正矢公式)除以总时间量(“2022 -04- 23 T03:38:24 Z”-“2022-04- 23 T03:36:26 Z”)的平均速度值。
如何用Python写这个?

m1m5dgzv

m1m5dgzv1#

pandas.DataFrame.interpolate可能是你正在寻找的,如果你正在寻找一个天真的方法 (如果你正在寻找更具体的东西,还有其他选择,请参阅文档)

df.interpolate(inplace=True)
df[["latitude", "longitude", "speed"]] = df[["latitude", "longitude", "speed"]].round().astype(int)

结果:

ID                  time  latitude  longitude  speed
0  ID  2022-04-23T03:36:26Z        60         10     83
1  ID  2022-04-23T03:37:30Z        60         10     79
2  ID  2022-04-23T03:37:48Z        60         10     75
3  ID  2022-04-23T03:38:24Z        61         11     72
4  ID  2022-04-23T03:44:20Z        63         13     75
5  ID  2022-04-23T03:45:02Z        64         13     72
6  ID  2022-04-23T03:45:06Z        65         13     69
7  ID  2022-04-23T03:45:08Z        66         14     66
8  ID  2022-04-23T03:45:12Z        67         14     63
9  ID  2022-04-23T03:45:48Z        69         15     61

相关问题