You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:27:03