Python 重复提取大熊猫行组的有效方法
我有一个pandas数据框架,本质上如下所示:Python 重复提取大熊猫行组的有效方法,python,pandas,Python,Pandas,我有一个pandas数据框架,本质上如下所示: Group Date Value etc. 1 01/01 10 1 05/01 10 1 08/01 5 1 15/01 5 1 18/01 2 1 21/01 10 ... 2 02/01 3 2 15/01 4 2 25/01 1 ... 3 01/01 6 ....
Group Date Value etc.
1 01/01 10
1 05/01 10
1 08/01 5
1 15/01 5
1 18/01 2
1 21/01 10
...
2 02/01 3
2 15/01 4
2 25/01 1
...
3 01/01 6
....
我想将每个组
提取到一个单独的数据帧中,该数据帧包含该组中的所有行(例如到一个带有键1、2、3等的字典中)。显而易见的方法是使用一个切片(比如df[df.Group==1]
)在组中循环
但是,对于非常大的数据集(700k行,30k组),切片技术的速度非常慢,因为每个30k组都必须访问整个700k事务
有没有关于更快的方法的建议,其中700k行中的每一行只需访问一次即可执行分组?谢谢 我不知道为什么您希望每个组都有一个单独的df,我只需在“group”上使用
groupby
,然后使用该属性索引回原始df,或者使用:
您可以在
Group
列上使用groupby
。这将获得所有组,您将能够使用以下功能处理每个组-
df.groupby('Group').<apply function here>
这将为您提供组1:
In [16]: grp.get_group(1)
Out[16]:
Group Date Value
0 1 01/01 10
1 1 05/01 10
2 1 08/01 5
3 1 15/01 5
4 1 18/01 2
5 1 21/01 10
8 1 21/01 10
9 1 15/01 5
这里的文档将进一步帮助您-为什么需要在单独的数据集中使用它?我需要对每组行执行一系列操作,为此,我只需要该组中的行。否则,我会在整个集合上重复执行切片操作。非常优雅,我不知道
组。get_组(…)
太棒了,get_组
正是我想要的!谢谢。非常感谢:-)我勾选了上面的答案,因为它是第一位的,但那正是我要找的。
In [13]: df
Out[13]:
Group Date Value
0 1 01/01 10
1 1 05/01 10
2 1 08/01 5
3 1 15/01 5
4 1 18/01 2
5 1 21/01 10
6 2 15/01 5
7 2 18/01 2
8 1 21/01 10
9 1 15/01 5
10 5 18/01 2
11 5 21/01 10
In [14]: df.groupby('Group').groups
Out[14]: {1: [0, 1, 2, 3, 4, 5, 8, 9], 2: [6, 7], 5: [10, 11]}
In [15]: grp = df.groupby('Group')
In [16]: grp.get_group(1)
Out[16]:
Group Date Value
0 1 01/01 10
1 1 05/01 10
2 1 08/01 5
3 1 15/01 5
4 1 18/01 2
5 1 21/01 10
8 1 21/01 10
9 1 15/01 5