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

如何基于多列筛选DataFrame中10月至次年4月的完整事件行?

问题分析与解决方案

原代码问题

你之前写的final_mask逻辑有问题:((start_mask & mask) | (end_mask & mask) | mask)其实等价于直接用mask,因为mask已经包含了所有目标月份的行,所以最终结果和直接筛选目标月份没区别,根本没起到过滤事件的作用。

正确筛选逻辑

要实现你的需求,核心是先判断每个事件的起始月份是否在目标区间(10、11、12、1、2、3、4月),再提取该事件中属于目标月份的行:

  • 要是事件起始于9月,哪怕有10月的行,也全部排除
  • 要是事件起始于4月,哪怕延续到5月,只保留该事件里4月的行

实现代码

import pandas as pd

# 1. 给每行添加月份列
Rain_Stream['month'] = Rain_Stream['Tidspunkt'].dt.month

# 2. 按事件编号分组,算出每个事件的起始月份(取事件最早的时间对应的月份)
event_start_month = Rain_Stream.groupby('event_number')['Tidspunkt'].min().dt.month

# 3. 筛选出起始月份在目标区间内的有效事件编号
valid_events = event_start_month[(event_start_month >= 10) | (event_start_month <= 4)].index

# 4. 生成最终掩码:行属于有效事件,且行的月份在目标区间内
final_mask = Rain_Stream['event_number'].isin(valid_events) & ((Rain_Stream['month'] >= 10) | (Rain_Stream['month'] <= 4))

# 5. 提取符合条件的行并重置索引
extracted_rs = Rain_Stream[final_mask].reset_index(drop=True)

代码说明

  • 步骤2:通过分组取每个事件的最早时间,确定事件的起始月份
  • 步骤3:筛选出起始月份在10-4月的事件,这些是我们要保留的事件
  • 步骤4:双重过滤,既保证行属于有效事件,又保证行的月份在目标区间内,完美满足你的要求:排除起始于9月的事件,同时保留起始于4月且延续到5月的事件中4月的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:35:13