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

如何在Python中按id分组提取cycle为整数值的行

Pandas 按ID分组提取Cycle为整数值的行

给定包含id、cycle、Salary、Children、Days字段的Pandas数据集,需按id分组后,仅保留每个分组中cycle为整数值的行(如1、1.0、2.0这类值)。

原始数据集代码

import pandas as pd

# 创建数据集
data = {'id': [1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1,
               2, 2, 2, 2, 2, 2,
               3, 3, 3, 3, 3, 3,3,
               4, 4, 4, 4,4,
               5, 5, 5, 5, 5,5, 5, 5,5,     5,5, 5,5, 5, 5,5],
        'cycle': [0.2,0.4, 0.6, 0.8, 1,1.2,1.4,1.6,1.8,2.0,2.2,
                   0.2,0.4, 0.6,0.8,1.0,1.2,
                   0.2,0.4, 0.6, 0.8,1.0,1.2,1.4,
                  0.2,0.4, 0.6, 0.8,1.0,
                  0.2,0.4, 0.6, 0.8, 1.0,1.2,1.4,1.6,1.8,   2.0,2.2,2.4,2.6,2.8,3.0,3.2],
        'Salary': [7, 7, 7,8,9,10,11,12,13,14,15,
                   4, 4, 4,4,5,6,
                   8,9,10,11,12,13,14,
                   8,9,10,11,12,
                   7, 7,9,10,11,12,13,14,15, 9,10,11,12,13,14,15],
        'Children': ['No', 'Yes', 'Yes', 'Yes', 'Yes', 'No','No', 'Yes', 'Yes', 'Yes', 'No',
                     'Yes', 'Yes', 'No', 'Yes', 'Yes', 'Yes', 
                     'No','Yes', 'Yes', 'No','No', 'Yes','Yes',
                     'Yes', 'No','Yes', 'Yes','Yes',
                      'No',  'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No',    'No',  'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes'],
        'Days': [123, 128, 66, 66, 120, 141, 52,96, 120, 141, 52,
                 96, 120,120, 141, 52,96,
                 15,123, 128, 66, 120, 141, 141,
                 141,123, 128, 66,67,
                 123, 128, 66, 123, 128, 66, 120, 141, 52,   123, 128, 66, 123, 128, 66, 120,],
        }

# 转换为DataFrame
df = pd.DataFrame(data)
print("原始数据集:\n", df)

实现方法

方法1:直接布尔索引筛选(推荐,性能最优)

利用浮点数的is_integer()方法准确判断cycle是否为整数值,直接筛选符合条件的行:

# 筛选cycle为整数值的行
filtered_df = df[df['cycle'].apply(lambda x: x.is_integer())]
print("筛选后数据集:\n", filtered_df)

说明

  • x.is_integer()会精准识别浮点数是否为整数(如1.0.is_integer()返回True,0.2.is_integer()返回False)
  • 无需额外分组操作即可覆盖所有id分组的筛选需求,执行效率最高

方法2:按ID分组后筛选(满足分组操作要求)

如果必须通过分组逻辑实现,可结合groupby与apply操作:

# 按id分组,保留每组中cycle为整数值的行
filtered_df = df.groupby('id').apply(lambda group: group[group['cycle'].apply(lambda x: x.is_integer())]).reset_index(drop=True)
print("筛选后数据集:\n", filtered_df)

说明

  • 先按id分组,对每个分组单独执行筛选逻辑
  • reset_index(drop=True)用于重置索引,避免分组后产生多级索引结构

预期结果示例

筛选后的数据集将仅包含每个id下cycle为整数值的行,例如:

  • id=1保留cycle=1、2.0的行
  • id=5保留cycle=1.0、2.0、3.0的行

内容的提问来源于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.26 10:37:22