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

如何基于周期阈值删除DataFrame中符合条件的id组及对应行

解决方法:删除最大周期≤阈值的ID行

可以通过两种简洁的方法实现需求,核心思路都是先识别出最大周期超过阈值的ID,再保留这些ID的所有行。

方法一:用transform生成每行对应ID的最大周期

这种方法直接在原DataFrame上生成临时列,一步完成筛选:

import pandas as pd

# 构造原始DataFrame
data = {'id': [1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1,
               2, 2,
               3, 3, 3, 3, 3, 3,
               4, 4, 4,
               5, 5, 5, 5, 5,5, 5, 5,5],
        'cycle': [1,2, 3, 4, 5,6,7,8,9,10,11,
                  1,2, 
                  1,2, 3, 4, 5,6,
                  1,2, 3,
                  1,2, 3, 4, 5,6,7,8,9,],
        'Salary': [7, 7, 7,8,9,10,11,12,13,14,15,
                   4, 4,
                   8,9,10,11,12,13,
                   8,9,10,
                   7, 7,9,10,11,12,13,14,15,],
        'Children': ['No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No',
                     'Yes', 'Yes', 
                     'No','Yes', 'Yes', 'No','No', 'Yes',
                     'Yes', 'Yes', 'Yes',
                      'No',  'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No',],
        'Days': [123, 128, 66, 66, 120, 141, 52,96, 120, 141, 52,
                 96, 120,
                 15,123, 128, 66, 120, 141,
                 141,123, 128,
                 123, 128, 66, 123, 128, 66, 120, 141, 52,],
        }

df = pd.DataFrame(data)
cycle_threshold = 3

# 给每行添加对应ID的最大周期列
df['max_cycle'] = df.groupby('id')['cycle'].transform('max')
# 筛选出最大周期超过阈值的行,同时删除临时列
filtered_df = df[df['max_cycle'] > cycle_threshold].drop(columns='max_cycle')

print("筛选结果:\n", filtered_df)
  • groupby('id')['cycle'].transform('max'):按ID分组计算每个组的最大周期,再把结果映射到组内每一行,这样每行都能拿到对应ID的最大周期。
  • 最后筛选出符合条件的行,并清理临时列。

方法二:先获取合格ID列表再筛选

这种方法不生成临时列,适合处理大数据集:

# 计算每个ID的最大周期,得到ID与最大周期的映射
id_max_cycle = df.groupby('id')['cycle'].max()
# 筛选出最大周期超过阈值的ID
valid_ids = id_max_cycle[id_max_cycle > cycle_threshold].index
# 保留这些ID的所有行
filtered_df = df[df['id'].isin(valid_ids)]

print("筛选结果:\n", filtered_df)
  • groupby('id')['cycle'].max()生成一个Series,索引是ID,值是对应ID的最大周期。
  • 提取出符合条件的ID后,用isin(valid_ids)直接过滤原DataFrame,保留目标行。

两种方法最终都会删除ID-2和ID-4的所有行,保留ID-1、3、5的完整数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:24:53