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

如何在Pandas中按ID分组:当Flag1为1时标记当前及后续11行

按分组生成flag2列的实现方案

核心处理逻辑

  • 以unique id为单位分组处理数据
  • 每个分组的规则:
    • 若该ID的记录行数不足12行,所有行的flag2直接设为1
    • 若行数≥12行,逐行判断:
      • 当某行flag1=0,且未被之前flag1=1的行覆盖后续11个月的标记,则flag2=0
      • 当某行flag1=1,当前行及后续11个月的flag2强制设为1,不受这段时间flag1的其他值影响

Pandas实现代码

import pandas as pd

def process_flag2(group):
    group = group.copy()
    row_count = len(group)
    group['flag2'] = 0
    
    # 行数不足12的情况直接全设1
    if row_count < 12:
        group['flag2'] = 1
        return group
    
    # 初始化标记数组,记录需要设为1的行
    mark_array = [False] * row_count
    for idx in range(row_count):
        if group['flag1'].iloc[idx] == 1:
            # 计算当前行往后11个月的结束位置,不超出总行数
            end_pos = min(idx + 12, row_count)
            mark_array[idx:end_pos] = [True] * (end_pos - idx)
    
    # 将标记数组转为0/1数值
    group['flag2'] = [1 if val else 0 for val in mark_array]
    return group

# 假设你的数据集为df,且已按period排序
df = df.groupby('unique id').apply(process_flag2).reset_index(drop=True)

代码说明

  • process_flag2函数单独处理单个ID的分组数据,避免修改原数据集
  • 用布尔数组mark_array批量标记目标行,比逐行修改效率更高
  • 遍历中遇到flag1=1时直接覆盖后续11行的标记,确保该规则优先级最高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:20:14