pandas groupby用法疑问:for循环能否遍历每个唯一CODE分组?
你的现有代码无法实现按CODE分组遍历的需求,存在3个核心问题:
- 遍历逻辑完全错误:
codegroup是GroupBy对象,直接迭代时每次返回的是(分组CODE值, 该分组对应DataFrame)的二元组,你在循环体中完全没有用到迭代出来的code变量,反而每次循环都对整个codegroup执行全量聚合计算,等于每次循环都重复计算所有分组的聚合结果,根本没有针对当前遍历的单个分组做处理。 - 存在未定义变量:代码中的
itn没有任何赋值定义,运行时会直接抛出NameError。 append方法已废弃:pandas 2.0及以上版本已经移除了DataFrame.append方法,即使前面逻辑修正也无法在高版本pandas中运行。
推荐实现方式(无需循环,性能更高)
直接对GroupBy对象做批量聚合再拆分数据,避免循环遍历的性能损耗:
import pandas as pd # 按CODE分组计算所需指标 group_stats = df.groupby("CODE", as_index=False).agg( group_size=("ID", "size"), id_max=("ID", "max"), id_min=("ID", "min") ) # 计算判定字段 group_stats["result"] = (group_stats["id_max"] - group_stats["id_min"]) - group_stats["group_size"] # 拆分符合条件和不符合条件的CODE pass_codes = group_stats[group_stats["result"] == 1]["CODE"] df2 = df[df["CODE"].isin(pass_codes)].reset_index(drop=True) df3 = df[~df["CODE"].isin(pass_codes)].reset_index(drop=True)
如果你必须用循环遍历分组的正确写法
# 初始化结果表,和原表结构一致 df2 = pd.DataFrame(columns=df.columns) df3 = pd.DataFrame(columns=df.columns) for code_val, group_df in df.groupby("CODE"): # 仅针对当前单个分组计算指标 group_size = len(group_df) id_max = group_df["ID"].max() id_min = group_df["ID"].min() result = (id_max - id_min) - group_size if result == 1: df2 = pd.concat([df2, group_df], ignore_index=True) else: df3 = pd.concat([df3, group_df], ignore_index=True)
内容的提问来源于stack exchange,提问作者pilotmike327
相关产品推荐
相关产品推荐

