У меня есть кадр данных Pandas, где я пытаюсь заменить значения в каждой группе средним значением группы. На моей машине линия df["signal"].groupby(g).transform(np.mean)
занимает около 10 секунд для работы с N
и N_TRANSITIONS
установлена на цифры ниже.Ускоренный способ преобразования группы со средним значением в Pandas
Есть ли более быстрый способ достижения такого же результата?
import pandas as pd
import numpy as np
from time import time
np.random.seed(0)
N = 120000
N_TRANSITIONS = 1400
# generate groups
transition_points = np.random.permutation(np.arange(N))[:N_TRANSITIONS]
transition_points.sort()
transitions = np.zeros((N,), dtype=np.bool)
transitions[transition_points] = True
g = transitions.cumsum()
df = pd.DataFrame({ "signal" : np.random.rand(N)})
# here is my bottleneck for large N
tic = time()
result = df["signal"].groupby(g).transform(np.mean)
toc = time()
print toc - tic
какая версия pandas? на master/0.13.1 это занимает 500 мс – Jeff
@Jeff: я получаю 1,81 с, но я не понимаю, почему это так длиннее, чем 'df [" signal "]. groupby (g) .mean()' который принимает меня всего 6,07 мс. – DSM
'' mean'' является cythonized, преобразование должно идти туда и обратно в пространство python – Jeff