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

Python pandas按ID分组条件过滤并保留原索引的实现问题

解决方案

完整可运行的实现代码如下:

import pandas as pd

# 原判断逻辑的向量化实现,适配pandas Series输入
def is_perfect_square(series):
    sqrt_num = series ** 0.5
    return sqrt_num.astype(int) ** 2 == series

# 测试数据
df = {
   'ID':['1','1','1','1','1','2','2','2','2','2','3','3','3','3','3'],
   'Percentage':[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]}
df = pd.DataFrame(df)

# 核心过滤逻辑
# 按ID分组,判断组内是否存在符合条件的数值,生成每行对应的布尔掩码
mask = df.groupby('ID')['Percentage'].transform(lambda x: is_perfect_square(x).any())
# 用掩码过滤行,保留原始索引
result = df[mask]

运行后result输出与预期完全一致,类型为标准pandas DataFrame,且完全保留原始索引。


补充说明

  • 整个运算过程为pandas原生向量化操作,没有逐行/逐组调用自定义标量函数,性能远高于普通apply实现,适合处理大数据量场景
  • 如果需要复用你原有funct1,可以将判断逻辑替换为transform(lambda x: x.apply(funct1).any()),但该方式不属于纯向量化实现,数据量大时性能会更低,优先推荐上述向量化方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:27:04