我有一个数据框df,看起来像这样:

column_a  ...
1         
1         
1
2
3
3
3
3
3

现在,我想基于column_a对数据帧进行分组,但结果组的大小不应大于s.

我在分组数据帧(df.groupby(['column_a']))上使用了一个简单的循环,如果组太大,则将其拆分,但我觉得有一种更短、更优雅的方法可以做到这一点.

有没有人知道一种简短而优雅的方法可以在有限的群体规模下进行分组?

推荐答案

看起来你可以按a分组,按cumcount和s分组.

import pandas as pd
df = pd.DataFrame({'a':[1,1,1,2,3,3,3,3,3]})
s = 2
df.groupby(['a',df.groupby('a').cumcount()//s]).size()

输出

a   
1  0    2
   1    1
2  0    1
3  0    2
   1    2
   2    1

Python相关问答推荐

Python中的嵌套Ruby哈希

如何在虚拟Python环境中运行Python程序?

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

Python+线程\TrocessPoolExecutor

UNIQUE约束失败:customuser. username

Pandas:计算中间时间条目的总时间增量

如何使用OpenGL使球体遵循Python中的八样路径?

基于Scipy插值法的三次样条系数

polars:有效的方法来应用函数过滤列的字符串

pandas fill和bfill基于另一列中的条件

在numpy数组中寻找楼梯状 struct

如何根据rame中的列值分别分组值

如何在Python中自动创建数字文件夹和正在进行的文件夹?

利用SCIPY沿第一轴对数组进行内插

我怎么才能用拉夫分拣呢?

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

Django抛出重复的键值违反唯一约束错误

多索引数据帧到标准索引DF

如何在Django查询集中生成带有值列表的带注释的字段?

如何在不遇到IndexError的情况下将基数10的整数转换为基数80?