我有一个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
答案 0 :(得分:0)
使用transform:
df.groupby([groups[0]])[varnames].transform(lambda z: z - z.mean())