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

Pandas按ID分组生成新列:仅替换每组内dummy列第二个1为0

实现代码

你可以通过分组累计求和定位到每个ID组内的第二个1,再做对应替换,代码如下:

import pandas as pd
# 原始数据构造
df = pd.DataFrame({
    "ID": [1, 1, 1,1,2,2, 2, 2,3,3,3,3],
    "year": [2004, 2005, 2006, 2007, 2004, 2005, 2006, 2007,2004, 2005, 2006, 2007],
    "dummy": [0,1,1,0,1,1,0,0,0,0,0,0]
})

# 生成目标列dummy1
df['dummy1'] = df['dummy'].where(df.groupby('ID')['dummy'].cumsum() != 2, 0)

逻辑说明

  • df.groupby('ID')['dummy'].cumsum() 会在每个ID分组内对dummy列做累计求和,每遇到1就计数+1,遇到0保持计数不变,因此累计和等于2的位置,就是该组内第二个dummy=1的行
  • where() 方法会保留符合条件的原始值,不符合条件的位置替换为指定的0,刚好实现仅替换每组第二个1为0,其他值保持不变的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:24:05