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

如何统计Pandas各分组下data_window连续递增1的次数

按分组统计data_window递增1的行数

给定如下DataFrame:

import pandas as pd

df = pd.DataFrame({
    'sample_type': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
    'data_window': [4, 5, 6, 1, 7, 8, 2, 3],
    'value': [0.6, 0.1, 1.2, 0.5, 0.3, 0.8, 1.4, 0.7]
})

需求:针对每个sample_type,统计data_window恰好递增1的行数(例如A对应2,B对应1,C对应1),能否用df['data_window'].diff()类方法按分组实现?


当然可以用diff()结合分组来完成,直接看实现方式:

方法1:分步清晰实现

# 计算每组内data_window的相邻行差值
df['window_diff'] = df.groupby('sample_type')['data_window'].diff()
# 筛选出差值为1的行,再按样本类型统计数量
count_result = df[df['window_diff'] == 1].groupby('sample_type').size()

方法2:链式简洁写法

count_result = df.groupby('sample_type')['data_window'].apply(lambda x: (x.diff() == 1).sum())

运行后得到的结果完全符合预期:

sample_type
A    2
B    1
C    1
dtype: int64

逻辑说明

  1. groupby('sample_type'):限定只在同一样本类型内部计算差值,避免跨组干扰
  2. .diff():计算当前行与上一行的data_window差值,每组第一行因无前置行返回NaN
  3. (x.diff() == 1):将差值恰好为1的情况标记为True,其余为False
  4. .sum():对布尔序列求和(True等价于1,False等价于0),直接得到每组符合条件的行数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:08:14