我想实现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)
我想知道这个问题是否有快速解决方案?
非常感谢!
答案 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
仍然不是很好,但更好。