如何解决Python中条件满足时中断并重新开始计算
我有包含纬度和经度的数据。我想消除那些异常的数据。基于速度和数据间距离的检测。
这是我的示例数据:
否 | 经度 | 纬度 | 日期时间 | 距离 | 速度 |
---|---|---|---|---|---|
1 | 1.1 | 45.2 | 01-01-2021 | NaN | NaN |
2 | 1.2 | 44.9 | 01-01-2021 | 10 | NaN |
3 | 1.2 | 45.1 | 01-01-2021 | 8 | 2 |
4 | 1.1 | 49.2 | 01-01-2021 | 100 | 50 |
5 | 1.1 | 49.2 | 01-01-2021 | 0 | 0 |
6 | 1.1 | 49.2 | 01-01-2021 | 0 | 0 |
7 | 1.4 | 45.3 | 01-01-2021 | 100 | 50 |
我使用haversine计算和速度来检测异常(速度超过20)。问题是我的脚本只检测第一个异常(第 4 行),实际上异常是第 4 行到第 6 行。它无法检测异常,因为基于前一行的计算。
如何去掉第一行异常,然后重新启动脚本重新计算,让第5、6行检测为异常?或者还有其他方法可以做到这一点?
示例代码
def haversine(lat1,lon1,lat2,lon2,to_radians=True,earth_radius=6371):
if to_radians:
lat1,lon2 = np.radians([lat1,lon2])
a = np.sin((lat2-lat1)/2.0)**2 + \
np.cos(lat1) * np.cos(lat2) * np.sin((lon2-lon1)/2.0)**2
return earth_radius * 2 * np.arcsin(np.sqrt(a))
df['Distance'] = \
np.concatenate(df.groupby('ID')
.apply(lambda x: haversine(x['Latitude'],x['Longitude'],x['Latitude'].shift(),x['Longitude'].shift())).values)
df['Time_Diff'] = df.sort_values(['ID','Datetime']).groupby('ID')['Datetime'].diff()
df['Time_Diff'] = df['Time_Diff'].dt.total_seconds()
df['Time_Diff'] = df['Time_Diff'] / 3600
df['Speed'] = df['Distance'] / df['Time_Diff']
df= df[df.Speed <= 20]
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。