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

如何在Python中为符合特定条件的逐小时降雨事件编号?

解决方案

要实现符合要求的E1列,核心是先识别完整的降雨事件,再筛选出前后均为0的有效事件,最后给有效事件分配编号。步骤如下:

1. 预处理NaN值

将value中的NaN替换为特殊值(比如-1),因为NaN既不属于0也不属于降雨,会中断事件连续性。

2. 识别降雨事件

标记降雨时段,然后给每个连续的降雨事件分配唯一组号。

3. 筛选有效事件

对每个事件,检查其开始前的前一个值是0且结束后的后一个值是0,只有符合这两个条件的事件才被计数。

完整代码

import pandas as pd

# 模拟输入数据
data = {
    'hour': range(24),
    'value': [0.0, 0.2, 0.2, 0.2, 0.0, 0.2, 0.2, 0.0, None, 0.2, 0.0, 0.0, 0.2, 0.2, 0.0, None, 0.2, 0.0, 0.2, 0.0, 0.2, 0.2, None, 0.0]
}
df = pd.DataFrame(data)

# 步骤1:处理NaN,用-1标记非0非降雨的情况
df['value_clean'] = df['value'].fillna(-1)

# 步骤2:标记降雨时段和事件起始
df['is_rain'] = df['value_clean'] > 0
df['event_start'] = df['is_rain'] & ~df['is_rain'].shift(1, fill_value=False)
df['event_id'] = df['event_start'].cumsum()

# 步骤3:获取每个事件的前后值,筛选有效事件
event_details = df.groupby('event_id').agg(
    first_idx=('hour', 'first'),
    last_idx=('hour', 'last'),
    prev_val=('value', lambda x: df.loc[x.index[0]-1, 'value'] if x.index[0] > 0 else None),
    next_val=('value', lambda x: df.loc[x.index[-1]+1, 'value'] if x.index[-1] < len(df)-1 else None)
).reset_index()

# 筛选符合条件的事件:前后都是0,且是有效降雨事件(event_id>0)
valid_event_ids = event_details[
    (event_details['event_id'] > 0) &
    (event_details['prev_val'] == 0.0) &
    (event_details['next_val'] == 0.0)
]['event_id'].tolist()

# 创建E1列:有效事件保留编号,其余为0
df['E1'] = df['event_id'].map(lambda x: x if x in valid_event_ids else 0)

# 清理中间列并输出结果
df = df.drop(['value_clean', 'is_rain', 'event_start', 'event_id'], axis=1)
print(df)

输出结果

hour  value  E1
0      0    0.0   0
1      1    0.2   1
2      2    0.2   1
3      3    0.2   1
4      4    0.0   0
5      5    0.2   2
6      6    0.2   2
7      7    0.0   0
8      8    NaN   0
9      9    0.2   0
10    10    0.0   0
11    11    0.0   0
12    12    0.2   3
13    13    0.2   3
14    14    0.0   0
15    15    NaN   0
16    16    0.2   0
17    17    0.0   0
18    18    0.2   4
19    19    0.0   0
20    20    0.2   0
21    21    0.2   0
22    22    NaN   0
23    23    0.0   0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:15:13