如何提高groupby / transform的速度?

时间:2014-06-25 22:31:46

标签: pandas

我想实现groupmax函数,该函数查找每个组中的最大值,并将其分配回每个组中的行。似乎groupby(name).transform(max)是我需要的。 E.g。

In [1]: print df
  name     value
0    0  0.363030
1    0  0.324828
2    0  0.499279
3    1  0.799836
4    1  0.886653
5    1  0.335056

In [2]: print df.groupby('name').transform(max)
      value
0  0.499279
1  0.499279
2  0.499279
3  0.886653
4  0.886653
5  0.886653

然而,当数据框的大小变大并且有许多小组时,这种方法非常慢。例如。以下代码将永远挂在那里

df = pd.DataFrame({'name' : repeat([str(x) for x in range(0, 1000000)], 2), 'value' : rand(2000000)})
print df.groupby('name').transform(max)

我想知道这个问题是否有快速解决方案?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试类似

的内容
>>> df = pd.DataFrame({'name': np.repeat(list(map(str,range(10**6))), 2), 'value': np.random.rand(2*10**6)})
>>> %timeit df.groupby("name").max().loc[df.name.values].reset_index(drop=True)
1 loops, best of 3: 2.12 s per loop

仍然不是很好,但更好。