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

Pandas实现:为符合条件的连续行集群添加分组变量

通用实现方法

针对你的需求,我们可以利用Pandas的移位(shift)和累加(cumsum)操作,高效识别连续的True集群并完成编号,代码适用于任意行数和集群大小的数据集:

1. 导入库并创建示例DataFrame

import pandas as pd

df = pd.DataFrame({'forms_a_cluster': [False, False, True, True, True, False, False, False,
                                       True, True, False, True, True, True, False]})

2. 生成集群编号

# 标记每个集群的起始行:当前行是True且上一行是False时,标记为1,否则为0
cluster_starts = df['forms_a_cluster'] & ~df['forms_a_cluster'].shift(fill_value=False)
# 累加起始标记,得到每个集群的唯一编号
df['cluster_number'] = cluster_starts.cumsum()
# 将非集群行的编号替换为False
df['cluster_number'] = df['cluster_number'].where(df['forms_a_cluster'], False)

代码解释

  • df['forms_a_cluster'].shift(fill_value=False):将forms_a_cluster列向下移位一行,第一行填充False,用于对比当前行与上一行的状态。
  • cluster_starts:仅在当前行是True且上一行是False时返回True,对应每个集群的第一行,其余行返回False。
  • cluster_starts.cumsum():对起始标记累加,这样同一集群内的所有连续True行都会获得相同的编号(如第一个集群为1,第二个为2)。
  • .where(df['forms_a_cluster'], False):仅保留forms_a_cluster为True的行的编号,非集群行替换为False,完全匹配你的期望输出。

最终输出

运行后df的结果与你提供的示例一致:

forms_a_clustercluster_number
FalseFalse
FalseFalse
True1
True1
True1
FalseFalse
FalseFalse
FalseFalse
True2
True2
FalseFalse
True3
True3
True3
FalseFalse

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:25:03