首页 > 解决方案 > 按大小对 DataFrameGroupBy 中的组进行排序

问题描述

我有一个 DataFrame,如下所示:

    label   value
0   x       1
1   y       5
2   x       43
3   y       22
4   y       31

由...制作:

df = pd.DataFrame([['x', 1],['y', 5], ['x',43], ['y', 22], ['y', 31]], columns=['label', 'value'])

现在我想按标签对数据进行分组并遍历组,可以按如下方式完成:

gdf = df.groupby('label')
for key, grp in gdf:
  print(key)
  # do stuff with grp

但是,我想按特定顺序迭代它们,关键是组的大小。在这种情况下,我想首先处理标签y及其组,因为标签有三条记录,并且只有在该标签之后,x因为只有两条记录。

到目前为止,我设法找到的只是“如何对组内的数据进行排序”或应用于.size().sort_valuesgdf这将实现所需的排序,但它有效地丢弃了基础数据(即,如果我这样做,我将只能访问组的大小,但不是组中实际的原始数据)。

标签: pythonpandasdataframe

解决方案


您可以在迭代之前对组进行排序:

gdf = df.groupby("label")
for key, grp in sorted(gdf, key=lambda k: len(k[1]), reverse=True):
    print(key)

印刷:

y
x

推荐阅读