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

如何用Pandas将DataFrame连续符合条件行分组为簇并标记

解决方案:为连续True簇自动生成编号

实现代码

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'forms_a_cluster': [False, False, True, True, True, False, False, False,
                        True, True, False, True, True, True, False],
    'cluster_number': [False, False, 1, 1, 1, False, False, False,
                       2, 2, False, 3, 3, 3, False]
})

# 自动生成簇编号
# 1. 标记每个簇的起始行(当前为True且前一行为False)
cluster_starts = df['forms_a_cluster'] & ~df['forms_a_cluster'].shift(fill_value=False)
# 2. 累加起始行得到簇编号,非簇行替换为False
df['auto_cluster_number'] = cluster_starts.cumsum().mask(~df['forms_a_cluster'], False)

print(df)

代码解释

  • 标记簇起始点:df['forms_a_cluster'].shift(fill_value=False) 将列向下偏移一行,第一行填充False。通过逻辑运算筛选出「当前行是True且前一行是False」的位置,这些就是每个簇的起始行。
  • 生成簇编号:对起始点的标记结果做累加(cumsum()),同一簇内的所有行会共享同一个累加值,实现簇的统一编号。
  • 处理非簇行:用mask()方法将forms_a_cluster为False的行替换为False,与示例中的预期输出完全匹配。

适用性说明

该方法完全自动化,无需手动指定簇数量或大小,适用于任意行数、簇长度各异的数据集,直接复用即可。

内容的提问来源于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 06:10:01