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

Pandas按Year分组,移除Code值相近行并保留Bikes最大值行

按年份分组筛选相近Code值,保留Bikes最大值行

原始数据

首先定义示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Code': [12, 4, 2, 35, 40, 32],
    'Bikes': [356, 378, 389, 378, 370, 350],
    'Year': [2020, 2020, 2020, 2021, 2021, 2021]
})

需求说明

按Year列分组处理:

  • 在每组内识别Code数值差值≤3的相近值集合
  • 每个相近值集合中仅保留Bikes数值最大的行,删除其余行

实现代码

通过自定义分组处理函数完成需求:

def process_year_group(group):
    # 按Code排序,使相近值相邻
    sorted_group = group.sort_values('Code').reset_index(drop=True)
    # 标记相近值组:当前Code与前一个差值>3时,启动新组
    sorted_group['cluster_id'] = (sorted_group['Code'].diff() > 3).cumsum()
    # 每个相近组内保留Bikes最大的行
    return sorted_group.groupby('cluster_id').apply(lambda x: x.nlargest(1, 'Bikes')).reset_index(drop=True)

# 按Year分组执行处理
result_df = df.groupby('Year', group_keys=False).apply(process_year_group)
# 重置索引优化格式
result_df = result_df.reset_index(drop=True)

print(result_df)

输出结果

运行代码后得到符合预期的结果:

Code  Bikes  Year
0     2    389  2020
1    12    356  2020
2    35    378  2021
3    40    370  2021

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:50:30