python - .loc 在 Pandas 中运行缓慢

标签 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

最佳答案

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

关于python - .loc 在 Pandas 中运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35346837/

相关文章:

python - BeautifulSoup 转换成 python 换行符

python - 序列化可选的嵌套结构 : Difference between QueryDict and normal dict?

python - 按经纬度选择数据

python - 如何使用 lambda 和 hasattr 过滤嵌套属性上的对象数组?

python - openpyxl - 事件工作表被分组到选定的工作表

python - 删除 pandas 单元格内的重复元素并计算元素数量

python - pandas DataFrame - 如何对行进行分组和标记

python - 遍历 Excel 文件的迭代器

python - 如何使用 pip 将 nltk_data 安装为包?

python - 计算每天的交易实例 pandas 数据框