如何用Pandas实现基于C_p序列均值的船舶停泊状态判定?
船舶停泊状态判定的Pandas/Numpy实现问题
数据与规则说明
- 现有Pandas DataFrame包含
Index、Group、C_p三列:- 索引1-6的
Group为1,C_p值依次为27、85、83、78、66、47 - 索引7-9的
Group为3,C_p值依次为82、80、66
- 索引1-6的
C_p为船舶停泊置信系数,判定规则:若一段连续数据的
C_p均值≥80,且序列长度≥3,则该序列内的所有行标记为停泊状态(is_parked=1),其余为0。- 示例:索引2-4的序列均值为82.67,满足条件需标记为1;索引7-8序列均值达标但长度仅2,不满足条件。
现有尝试的代码逻辑
最初尝试的逻辑(未适配Pandas):
for i in range(n - 2): # n is the element number of a group avg = (C_p[i] + C_p[i+1] + C_p[i+2]) / 3 if avg >= 80: is_parked[i] = is_parked[i+1] = is_parked[i+2] = 1 # default value of is_parked is 0
后续调整的逻辑,但时间复杂度为O(n³),性能极差:
for i in range(n): thisSUM = C_p[i] for j in range(i+1, n): thisSUM += C_p[j] avg = thisSUM / (j - i + 1) if avg >= 80 and j - i + 1 >= 3: for k in range(i, j+1): is_parked_check[k] = 1
核心问题
- 是否可以用Pandas高效实现该判定逻辑?
- 若Pandas不合适,是否应改用Numpy或其他工具实现?
内容的提问来源于stack exchange,提问作者AndrewChao
相关产品推荐
相关产品推荐

