pandas - 删除稀疏组的最快方法?
问题描述
我有一些熊猫代码可以删除不属于全套的组。下面的代码正在做的一个例子是:
- 创建组
- 获得最大组的大小。例如,72
- 删除所有不在最大组中的行。即,如果我重新组合,每个组的大小将是 72
第 3 步的第一种方法对我来说最有意义,但速度很慢
第二种方式似乎有点复杂,但要快得多。可能会很复杂,因为groups
index 是 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)
解决方案
用于像原始 DataFrame 一样GroupBy.transform
的新数据,因此可以按以下方式过滤:Series
boolean indexing
size = medians.groupby(group_columns)['any column'].transform('size')
output = medians[size == size.max()]