python - 按大小对 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_values
,gdf
这将实现所需的排序,但它有效地丢弃了基础数据(即,如果我这样做,我将只能访问组的大小,但不是组中实际的原始数据)。
解决方案
您可以在迭代之前对组进行排序:
gdf = df.groupby("label")
for key, grp in sorted(gdf, key=lambda k: len(k[1]), reverse=True):
print(key)
印刷:
y
x
推荐阅读
- javascript - jQuery/Javascript 帮助:无法使用自动完成功能动态添加字段
- ios - iOS App Clip - openSettingsURLString / "app-settings:"
- css - CSS 使用剪辑路径调整图像大小以适合父容器
- python - 具有掩蔽的深度卷积网络,正确的输入形状
- c# - 使用 .NET MongoDb 驱动程序进行双重查找和展开
- python - Pytorch Siamese NN 与 BERT 用于句子匹配
- java - 是否有从 Luwak 到新 Lucene 版本的迁移文件?
- c# - 如何在 foreach 循环 cc# 中读取 xml 子节点
- python - 计算较长时间段内几个月的平均值
- node.js - 在 nodejs 后端使用 msal 时出错