我有一个 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
最佳答案
使用 transform :df.groupby([groups[0]])[varnames].transform(lambda z: z - z.mean())
关于python - .loc 在 Pandas 中运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346837/