删除稀疏组的最快方法?

时间:2019-12-14 10:11:44

标签: pandas

我有一些熊猫代码来删除不属于全套的组。下面的代码正在执行的示例是:

  1. 创建群组
  2. 获取最大的小组人数。例如72
  3. 删除所有不在最大组中的行。也就是说,如果我重新组合,每个组的大小将为72

第3步的第一种方法对我来说最有意义,但是很慢

第二种方法似乎有点令人费解,但速度更快。可能会令人费解,因为groups索引是medians索引的子集。 (两个索引都是多索引)

是否有一种快速,直观的方法来做到这一点?

    # filter out groups that are uncommon
    groups = medians.groupby(group_columns)
    max_group_size = groups.size().max()

    # # takes 84s
    # %time medians = groups.filter(lambda group: len(group) == max_group_size)

    # takes 34s
    groups_size = groups.size().to_frame('size')
    groups_to_drop = groups_size[groups_size.size != max_group_size].index
    %time medians = medians.drop(groups_to_drop)

1 个答案:

答案 0 :(得分:1)

GroupBy.transform用于新的Series,例如原始DataFrame,因此可以通过boolean indexing进行过滤:

size = medians.groupby(group_columns)['any column'].transform('size')
output = medians[size == size.max()]