簡體   English   中英

Pandas groupby + resample first 真的很慢 - 從 0.22 版開始

[英]Pandas groupby + resample first is really slow - since version 0.22

我有一段代碼將數據幀分組並為每個組運行resample('1D').first() 由於我升級到 0.22.0,它運行得更慢。

設置代碼

import pandas as pd
import numpy as np
import datetime as dt
import string


# set up some data
DATE_U = 50

STR_LEN = 10
STR_U = 50

N = 500

letters = list(string.ascii_lowercase)
def get_rand_string():
    return ''.join(np.random.choice(letters, size=STR_LEN))

dates = np.random.randint(0, 100000000, size=DATE_U)
strings = [get_rand_string() for _ in range(STR_U)]

df = pd.DataFrame({
    'date': np.random.choice(dates, N),
    'string': np.random.choice(strings, N),
})
df['date'] = pd.to_datetime(df['date'], unit='s')
df = df.set_index('date')

print('Shape: {}'.format(df.shape))
print(df.head())
print('\nUnique strings: {}'.format(df['string'].nunique()))
print('Unique dates: {}'.format(df.index.nunique()))

(印刷品)

Shape: (500, 1)
                       string
date                           
1973-02-07 19:57:43  wafadvlvty
1973-02-27 03:43:02  shofwwdhtu
1972-04-25 18:11:20  xwbbpwtsfj
1970-09-03 18:00:59  zkxwnqgrqp
1971-03-18 10:09:44  ofsaxqprdx

Unique strings: 50
Unique dates: 50

測試 groupby + resample.first

%%timeit -n 3 -r 3

def __apply(g):   
    g = g.resample('1D').first()
    return g

print('Pandas version: {}'.format(pd.__version__))

dfg = df.groupby('string').apply(__apply)

對於熊貓 0.21.0:

Pandas version: 0.21.0
118 ms ± 1.63 ms per loop (mean ± std. dev. of 3 runs, 3 loops each)

對於熊貓 0.22.0:

Pandas version: 0.22.0
3 loops, best of 3: 2.3 s per loop

這大約慢了 20 倍。 我的問題是為什么會這樣? 有沒有辦法在 0.22.0 中使其同樣快?

使用 .head(1) 代替如下

g = g.resample('1D').head(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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