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
相关产品推荐
相关产品推荐

