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

如何在Pandas DataFrame中查找最新连续0 cases_count的起始日期

问题:查找DataFrame中cases_count连续为0的最新连续段起始日期

给定如下结构的DataFrame:

datecases_count
2023-04-023
2023-04-030
2023-04-040
2023-04-051
2023-04-060
2023-04-070

需要编写函数,找到cases_count连续为0的最新连续段的起始日期,示例中应返回2023-04-06。

此前尝试仅查找cases_count == 0的最新日期,但这种方法无法识别连续段的起始点,忽略了该日期之前的连续情况。


解决方案

可以通过对连续0值进行分组标记的方式实现,核心思路是:

  • 标记0值行并按连续段分组
  • 筛选出结束日期最晚的连续段,取其起始日期

以下是基于pandas的Python代码实现:

import pandas as pd

def get_latest_zero_streak_start(df):
    # 复制数据避免修改原DataFrame
    df_copy = df.copy()
    # 转换日期格式并按时间排序
    df_copy['date'] = pd.to_datetime(df_copy['date'])
    df_copy = df_copy.sort_values('date').reset_index(drop=True)
    
    # 标记是否为0值行
    df_copy['is_zero'] = df_copy['cases_count'] == 0
    # 生成连续段分组ID:非0值的累积和会区分不同的0值连续段
    df_copy['group_id'] = (~df_copy['is_zero']).cumsum()
    
    # 提取所有0值连续段的起始、结束日期
    zero_groups = df_copy[df_copy['is_zero']].groupby('group_id').agg(
        start_date=('date', 'min'),
        end_date=('date', 'max')
    ).reset_index()
    
    # 无0值连续段时返回None
    if zero_groups.empty:
        return None
    
    # 获取结束日期最晚的连续段,返回其起始日期
    latest_group = zero_groups.loc[zero_groups['end_date'].idxmax()]
    return latest_group['start_date'].strftime('%Y-%m-%d')

# 测试示例数据
data = {
    'date': ['2023-04-02', '2023-04-03', '2023-04-04', '2023-04-05', '2023-04-06', '2023-04-07'],
    'cases_count': [3, 0, 0, 1, 0, 0]
}
df = pd.DataFrame(data)
print(get_latest_zero_streak_start(df))  # 输出:2023-04-06

逻辑说明:

  1. 先确保日期列是datetime类型并按时间排序,这是时间序列处理的基础
  2. is_zero列标记每行是否为0值
  3. group_id通过对非0值的累积和生成,同一连续0值段会拥有相同的group_id
  4. 对每个0值分组提取起始和结束日期,筛选出结束日期最晚的组,其起始日期就是目标结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:08:10