YXD*_*YXD 5 python numpy pandas
我有一个 Pandas 数据框,我试图用该组的平均值替换每个组中的值。在我的机器上,该行df["signal"].groupby(g).transform(np.mean)大约需要 10 秒才能运行N并N_TRANSITIONS设置为以下数字。
有没有更快的方法来达到相同的结果?
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
Run Code Online (Sandbox Code Playgroud)
受到杰夫的回答的启发。这是我的机器上最快的方法:
pd.Series(np.repeat(grp.mean().values, grp.count().values))
Run Code Online (Sandbox Code Playgroud)