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

Pandas DataFrame新增序列列:满足二值列条件时生成连续序号否则为0

实现方案

情况1:与示例结果完全匹配(按B列分组统计)

你给出的示例是在每个B列的分类内,对C=1的行按出现顺序累计递增序号,C=0时D取值为0,一行代码即可实现:

df['D'] = df.groupby('B')['C'].cumsum().where(df['C'] == 1, 0)

原理说明:

  • groupby('B')['C'].cumsum() 会在每个B分类下对C列做累加,由于C只有0和1两种取值,累加值刚好对应当前行是该B分类下第几个C=1的行
  • where(df['C'] == 1, 0) 会把C=0的行的计算结果替换为0,仅保留C=1行的累加值作为序号

情况2:不按B列分组,全局遇到C=0即重置序号

如果不需要考虑B列分类,只要遇到C=0就将后续C=1的序号从1重新开始计数,使用以下代码:

df['D'] = df.groupby((df['C'] == 0).cumsum()).cumcount().where(df['C'] == 1, 0)

原理说明:

  • (df['C'] == 0).cumsum() 会给每一段连续的C=1的块分配同一个分组编号,每次遇到C=0编号就加1
  • 按该分组编号分组后调用cumcount()得到组内行序号,C=1的行取对应行号作为D列值,C=0的行统一替换为0

注意点

如果运行时发现累加结果异常,可先将C列转为整数类型,避免浮点类型导致计算错误:

df['C'] = df['C'].astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:07