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

