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

Python Pandas:提取连续分组中每个Jane组的首行数据

解决方法

这里提供两种实现方式,都能快速得到你想要的结果:

方法一:简洁版(一行核心逻辑)

直接通过对比当前行与上一行的name,筛选出连续Jane分组的第一行:

import pandas as pd

df = pd.DataFrame({'name':['Jane','Jane','Mike','Mike','Jane','Jane','Jane',
                           'Mike','Mike','Jane','Jane','Jane'],
                   'ctg':['A','P','C','B','B','C','B','E','G','L','M','X']})

# 筛选目标行并重置索引
result = df[(df['name'] == 'Jane') & (df['name'] != df['name'].shift())].reset_index(drop=True)

print(result)

逻辑说明

  • df['name'].shift():把name列整体向下移动一行,第一行变为空值(NaN),这样就能和当前行的name做对比。
  • df['name'] != df['name'].shift():生成布尔列,当当前行name和上一行不同时为True,这正好对应每个连续分组的起始行。
  • 结合df['name'] == 'Jane'筛选,就只保留连续Jane分组的第一行,最后用reset_index(drop=True)整理索引。

方法二:分步版(更易理解)

如果觉得简洁版有点绕,可以分步拆解操作,更适合新手理清逻辑:

import pandas as pd

df = pd.DataFrame({'name':['Jane','Jane','Mike','Mike','Jane','Jane','Jane',
                           'Mike','Mike','Jane','Jane','Jane'],
                   'ctg':['A','P','C','B','B','C','B','E','G','L','M','X']})

# 1. 标记每行是否是Jane
df['is_jane'] = df['name'] == 'Jane'

# 2. 给连续的Jane分组:每次遇到非Jane,分组号+1,让连续Jane处于同一分组
df['jane_group'] = (~df['is_jane']).cumsum()

# 3. 筛选Jane的行,按分组取第一行,再整理列和索引
result = df[df['is_jane']].groupby('jane_group').first().reset_index(drop=True)[['name', 'ctg']]

print(result)

逻辑说明

  1. 先标记出所有Jane的行,方便后续筛选。
  2. 通过(~df['is_jane']).cumsum()生成分组号:非Jane的行会被转为True(相当于1),累加后每次遇到非Jane,分组号就会递增,这样连续的Jane会被分到同一个组里。
  3. 筛选出Jane的行后,按分组号聚合取第一行,最后去掉多余的中间列,重置索引得到结果。

两种方法运行后都会输出你预期的结果:

namectg
JaneA
JaneB
JaneL

内容的提问来源于stack exchange,提问作者K.Stefan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 02:15:39