簡體   English   中英

pandas groupby.apply 很慢,即使在小型數據集上也是如此

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM