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

基于Pandas按条件合并重复行并统计重复次数的技术需求

Pandas按col_b差值≤1分组并统计重复次数

需求说明

基于col_a分组,每组内将col_b值相差≤1的行视为同一重复组,新增col_c列记录该组的行数(即重复次数),最终保留每组首行并展示对应次数。

示例输入

col_a   col_b
A000    10.16
A000    10.5
A000    10.9
A000    25.87
A000    26.5
B101    30.111
B101    8

解决方案代码

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'col_a': ['A000', 'A000', 'A000', 'A000', 'A000', 'B101', 'B101'],
    'col_b': [10.16, 10.5, 10.9, 25.87, 26.5, 30.111, 8]
})

# 1. 按col_a分组,对每组的col_b排序(确保相邻值连续,方便差值判断)
df_sorted = df.groupby('col_a', group_keys=False).apply(lambda x: x.sort_values('col_b')).reset_index(drop=True)

# 2. 生成组标记:相邻col_b差值>1时视为新组,用cumsum分配连续组ID
df_sorted['group_id'] = df_sorted.groupby('col_a')['col_b'].diff().fillna(0).gt(1).cumsum()

# 3. 统计每个(col_a, group_id)组合的行数
counts = df_sorted.groupby(['col_a', 'group_id']).size().reset_index(name='col_c')

# 4. 合并统计结果,保留每组首行得到最终输出
df_output = df_sorted.merge(counts, on=['col_a', 'group_id']).drop_duplicates(subset=['col_a', 'group_id'], keep='first').drop('group_id', axis=1)

print(df_output)

示例输出

col_a   col_b  col_c
0  A000   10.16      3
1  A000   25.87      2
2  B101    8.00      1
3  B101  30.111      1

代码逻辑说明

  • 先按col_a分组排序,保证同组内col_b值有序,避免因乱序导致差值判断错误
  • 通过diff()计算相邻col_b的差值,结合gt(1)和cumsum(),把差值≤1的行归为同一组
  • 统计每组行数得到col_c,最后合并后保留每组首行,匹配需求的输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 09:02:11