首页 > 解决方案 > 删除稀疏组的最快方法?

问题描述

我有一些熊猫代码可以删除不属于全套的组。下面的代码正在做的一个例子是:

  1. 创建组
  2. 获得最大组的大小。例如,72
  3. 删除所有不在最大组中的行。即,如果我重新组合,每个组的大小将是 72

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

第二种方式似乎有点复杂,但要快得多。可能会很复杂,因为groupsindex 是 index 的子集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)

标签: pandas

解决方案


用于像原始 DataFrame 一样GroupBy.transform的新数据,因此可以按以下方式过滤:Seriesboolean indexing

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

推荐阅读