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

求助:如何计算风速连续大于10的时长?附错误Python代码

计算风速连续大于10的时长解决方案

原代码的核心问题有两个:

  • 用apply(axis=1)逐行遍历数据,对大数据集效率极低,且逻辑完全跑偏——你找的是风速小于当前行风速的下一个时间点,而非风速降到10以下的节点,根本不符合需求。
  • 没有对连续超10的风速区间做分组,无法直接统计连续时段的时长。

以下是正确的实现方案:

步骤1:预处理数据

先确保时间列和风速列的类型正确,避免后续计算报错:

import pandas as pd

# 转换DateTime列为datetime类型
df['DateTime'] = pd.to_datetime(df['DateTime'])
# 转换风速列为数值型(如果原数据是字符串格式)
df['Измеренная_скорость_ветра'] = pd.to_numeric(df['Измеренная_скорость_ветра'], errors='coerce')

步骤2:标记风速超10的行,生成连续区间分组ID

通过cumsum实现连续区间的分组:当风速从≤10变为>10时,分组ID自动递增,以此区分不同的连续超10时段:

# 标记风速大于10的行
df['wind_over_10'] = df['Измеренная_скорость_ветра'] > 10
# 生成连续区间的分组ID
df['group_id'] = (~df['wind_over_10']).cumsum()

步骤3:计算每个连续超10区间的时长

对每个分组(仅保留风速超10的分组),统计该区间的起止时间及时长:

# 按分组ID聚合,计算每个连续超10时段的时长
duration_df = df[df['wind_over_10']].groupby('group_id').agg(
    开始时间=('DateTime', 'min'),
    结束时间=('DateTime', 'max'),
    持续时长=('DateTime', lambda x: x.max() - x.min())
).reset_index(drop=True)

# 可选:把时长转成秒数
duration_df['持续时长_秒'] = duration_df['持续时长'].dt.total_seconds()

步骤4(可选):将时长映射回原数据集

如果需要给原数据的每一行标记其所属连续超10区间的时长:

# 把时长数据合并回原df
df = df.merge(
    duration_df[['group_id', '持续时长', '持续时长_秒']],
    on='group_id',
    how='left'
)
# 风速≤10的行时长设为空值或0
df.loc[~df['wind_over_10'], ['持续时长', '持续时长_秒']] = pd.NA

这个方案效率远高于逐行遍历,且能准确统计所有连续风速超10的时段时长。

内容的提问来源于stack exchange,提问作者Shohmirzo Umarov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:28:20