。熊在熊猫慢

时间:2016-02-11 18:07:01

标签: python pandas

我有一个DataFrame,它有多个数字列(varnames)和一个标记列(groups[0]),用于标识所有不同的观察组。我想取每组的平均值并从相应的观察中减去它:

mean                = df[varnames+[groups[0]]].groupby(groups[0]).mean()
df.loc[:,varnames] -= mean.loc[df[groups[0]]].values

我的代码有效,但需要很长时间。我已经分析了性能和花费很长时间的这一行:mean.loc[df[groups[0]]].values我认为这是最简单的路线。为什么需要这么长时间?我能优化一下吗?

版本:

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.11.final.0
python-bits: 64
OS: Linux
OS-release: 3.13.0-73-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8

pandas: 0.17.1

1 个答案:

答案 0 :(得分:0)

使用transformdf.groupby([groups[0]])[varnames].transform(lambda z: z - z.mean())