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

Pandas按groupby拆分DataFrame报Boolean array expected错误如何解决?

问题原因

你对pandas.core.groupby.DataFrameGroupBy.filter()方法的返回值理解有误:
该方法直接返回符合筛选条件的行组成的DataFrame,不是返回用于索引的布尔掩码,所以你拿到的mask本身就是符合分组长度≤1的数据集,不是可以用来索引dft的布尔数组,强制做索引就会抛出类型不匹配的错误。

正确实现方案

方案1:直接用filter返回值拆分

不需要额外做索引判断,filter已经帮你筛选出符合条件的df1,剩余行直接通过索引差集获取即可:

# 直接获取分组唯一(单组长度≤1)的数据集df1
df1 = dft.groupby(['O', 'A', 'N', 'value_next']).filter(lambda x: len(x) <= 1)
# 原数据集删除df1的索引对应行,得到分组不唯一的数据集df2
df2 = dft.drop(df1.index)

方案2:用transform生成布尔掩码拆分

如果习惯用布尔索引的写法,可以通过transform生成长度和原数据集完全对齐的布尔掩码,性能优于方案1,更适合大数据量场景:

# 生成布尔掩码:对应行所属分组长度≤1时为True,否则为False
mask = dft.groupby(['O', 'A', 'N', 'value_next'])['O'].transform(len) <= 1
# 按掩码拆分两个数据集
df1 = dft[mask]
df2 = dft[~mask]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:01