【发布时间】:2018-07-18 11:38:20
【问题描述】:
10k 以上的键数确实很慢,这确实很常见。有什么办法可以加快速度吗?
import pandas as pd
n = 10*1000000
ngroup = 10000
m = n//ngroup
d = pd.DataFrame({"a":range(n), "b":list(range(ngroup))*m})
%timeit dagg = d.groupby("b")["a"].agg(["mean","std"]).reset_index()
#700 ms
#custom function
%timeit dagg = d.groupby("b")["a"].agg(lambda x: x.mean()+x.std()).reset_index()
#4.37 s
R 的 data.table 中的比较
require(data.table)
n = 10*1000000
ngroup = 10000
m = n/ngroup
DT = data.table(a = 0:(n-1), b = rep(0:(ngroup-1), m))
system.time({dagg = DT[, .(m = mean(a), s = sd(a)), by = b]})
#0.42 sec
#custom function
f <- function(x)mean(x)+sd(x)
system.time({ dagg = DT[, .(k =f(a)), by = b] })
#0.81 sec
【问题讨论】:
标签: python pandas pandas-groupby