如何基于pandas DataFrame的COG航向列生成对应象限编号的新列或numpy数组
航向角象限编号计算解决方案
优先使用向量化操作实现,性能远高于手动遍历,尤其适合处理大规模AIS船舶数据,以下是三种常用实现方式:
方法1:numpy向量化实现(性能最优)
直接使用np.digitize分箱函数,一行代码即可完成计算:
import numpy as np import pandas as pd # 加载数据 url = 'https://github.com/LukeCaptainAI/norm_quad/blob/main/aisdecoded.csv?raw=true' df = pd.read_csv(url, index_col=0) # 分箱计算象限 bins = [0, 90, 180, 270, 360] df['quad_cog'] = np.digitize(df['cog'], bins=bins)
方法2:pandas.cut实现(可读性最强)
适合需要自定义标签、明确指定区间开闭规则的场景:
# right=False指定区间为左闭右开,完全匹配给定的判定条件 df['quad_cog'] = pd.cut( df['cog'], bins=[0, 90, 180, 270, 360], labels=[1, 2, 3, 4], right=False ).astype(int)
方法3:遍历实现(仅小数据量使用)
如果必须手动遍历,可参考以下写法,不推荐在万级以上数据量使用:
quad_cog = [] for cog_val in df['cog']: if 0 < cog_val < 90: quad_cog.append(1) elif 90 < cog_val < 180: quad_cog.append(2) elif 180 < cog_val < 270: quad_cog.append(3) elif 270 < cog_val < 360: quad_cog.append(4) else: # 边界值(0/90/180/270/360)可根据业务需求调整赋值逻辑 quad_cog.append(None) df['quad_cog'] = quad_cog
结果验证
执行后输出df[['cog', 'quad_cog']].head()即可看到符合预期的映射效果。
内容的提问来源于stack exchange,提问作者L Blauw
相关产品推荐
相关产品推荐

