基于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
相关产品推荐
相关产品推荐

