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

如何在Pandas GroupBy后移除空列表条目(类SQL HAVING子句)

解决Pandas Groupby后移除空列表的最优方案

你之前的filter用法错误原因

filter方法的作用是筛选原DataFrame中符合条件的行,返回的是Series/DataFrame而非分组后的聚合对象。所以你直接在filter后调用apply(list),会把每个单独的SALE PRICE数值当成迭代对象,自然触发TypeError: 'int' object is not iterable。

两种更优实现方案

方案一:先过滤分组,再生成列表

先通过groupby的filter排除掉空分组,再重新分组生成列表,从源头避免空列表出现:

for name in clean.alpha_names:
    # 筛选出分组后元素数量大于0的行(若要排除单元素分组,改成len(x) > 1)
    filtered_series = df_new_housing.groupby(name)['SALE PRICE'].filter(lambda x: len(x) > 0)
    # 基于过滤后的结果重新分组生成列表
    CategoryGroupLists = filtered_series.groupby(name).apply(list)

方案二:先生成分组列表,再用布尔索引过滤

先完成分组聚合,再直接通过布尔索引筛选掉空列表条目,代码更简洁高效:

for name in clean.alpha_names:
    CategoryGroupLists = df_new_housing.groupby(name)['SALE PRICE'].apply(list)
    # 直接筛选出长度大于0的列表(同理,要排除单元素则改成>1)
    CategoryGroupLists = CategoryGroupLists[CategoryGroupLists.str.len() > 0]

方案优势

这两种方法都比你之前的遍历删除高效:

  • 避免了手动遍历索引和删除操作,代码更简洁易维护
  • 布尔索引和groupby过滤都是Pandas内置的向量化操作,处理大数据量时性能远高于循环遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:01:16