在Pandas中以均值转换组的更快方法

发布于 2021-01-29 18:20:05

我有一个Pandas数据框,在这里我试图用组的平均值替换每个组中的值。在我的机器上,该行df["signal"].groupby(g).transform(np.mean)大约需要10秒钟才能运行,NN_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
关注者
0
被浏览
46
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    受Jeff的回答启发。这是我机器上最快的方法:

    pd.Series(np.repeat(grp.mean().values, grp.count().values))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看