[英]pandas groupby.apply is slow, even on small DataSets
我想通過兩個組變量聚合 pandas DataFrame 並對每個組進行計算。 因為我想混合列,所以我使用dataframe.groupby.apply以下代碼有效但速度莫名其妙。 3 秒聚合 4000 行。 當我將代碼更改為一個組變量時,它只是一半的時間,也許更少一點。 任何想法,為什么這么慢?
import random
df = pd.DataFrame(np.random.rand(4000,4), columns=list('abcd'))
df['group'] = random.choices([0, 0, 1, 1],k=4000)
df["grupp"]= random.choices([2, 3, 4, 2],k=4000)
df
def f(x):
d = {}
d['c_d_prodsum'] = (x['c'] * x['d']).sum()
return pd.Series(d, index=['c_d_prodsum'])
import time
start = time.time()
%timeit b=df.groupby(['group','grupp']).apply(f)
end = time.time()
print(end - start)
在我的機器上,它顯示33.2 ms ± 2.03 ms per loop
,秒數為2.77
如果您限制自己僅使用 pandas 提供的那些功能,您將獲得更好的性能。
例如...
def totime():
df['c*d'] = df['c']*df['d']
d = df.groupby(['group','grupp'])['c*d'].sum().rename('c_d_prodsum')
%timeit totime()
顯示842 µs ± 3.67 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.