如何将数据框分成固定大小的组?

Sqr*_*tPi 3 python optimization dataframe pandas

我正在处理大型数据框(>100 000 行和多列)。我需要对数据框进行排序,然后将其分成预定义大小的相等大小的组。如果还有剩余的行(即,如果行数不能被组的大小整除),则需要从数据框中删除任何较小的组。

例如1, 2, 3, 4, 5, 6, 7, 8, 9, 10,组大小3 应分为[1, 2, 3][4, 5, 6][7, 8, 9]10应丢弃。

我有一个解决方案,我可以使用创建一个新列

list(range(len(df.index) // group_size)) * group_size
Run Code Online (Sandbox Code Playgroud)

然后使用sort(), 和 将group_by()行分组在一起。之后我可以filter删除任何小于 的组group_size

示例工作代码:

list(range(len(df.index) // group_size)) * group_size
Run Code Online (Sandbox Code Playgroud)

这非常有效。不幸的是,我有很大的数据框,并且运行时间太长。我的方法还有其他选择吗?

小智 6

这将为您提供 DataFrame 列表:

lst = [df.iloc[i:i+group_size] for i in range(0,len(df)-group_size+1,group_size)]
Run Code Online (Sandbox Code Playgroud)

它只使用内置索引,所以它应该相当快。如果最后一帧太小,则对停止索引的烦扰会丢弃它 - 您也可以将其分解

lst = [df.iloc[i:i+group_size] for i in range(0,len(df),group_size)]
if len(lst[-1]) < group_size:
   lst.pop()
Run Code Online (Sandbox Code Playgroud)