首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python / Pandas -性能-尝试跳过全列操作中的for循环

Python / Pandas -性能-尝试跳过全列操作中的for循环
EN

Stack Overflow用户
提问于 2017-06-28 16:52:31
回答 1查看 40关注 0票数 1

我有一个叫做塔吉特的数据:

代码语言:javascript
复制
target:

          group  estimation_error
170  64.22-1-00          0.061829
72   64.22-1-00          2.242214
121  35.12-3-00         31.960277
99   64.22-1-00          4.819315
19   35.12-3-00          0.850597

我想创建一个名为group_error的新列,它是同一组的行的错误中值。看起来是这样的:

代码语言:javascript
复制
          group  estimation_error median_group_error
170  64.22-1-00          0.061829           2.242214
72   64.22-1-00          2.242214           2.242214
121  35.12-3-00         31.960277          16.405437
99   64.22-1-00          4.819315           2.242214
19   35.12-3-00          0.850597          16.405437

我做到了以下几点:

代码语言:javascript
复制
target['group_median_error']=""
groups=target.groupby('group')

for i in target.index:
    try:
        target['group_median_error'][i]=(groups.get_group(target.group[i])).estimation_error.median()
    except KeyError:
        pass

然而,由于这是一个庞大的数据,它需要太长时间。我相信,如果我能够跳过for循环,我将获得相当大的性能提升。

为了达到这个目的,我尝试用以下方法替换for循环:

代码语言:javascript
复制
target['group_median_error']=(groups.get_group(target.group)).estimation_error.median()

但是,它会导致以下错误:

代码语言:javascript
复制
TypeError: 'Series' objects are mutable, thus they cannot be hashed

而不是我想问的问题:

  • 有没有一种方法可以在不经过for循环的情况下执行同一操作?
  • 跳过那个循环会提高我的性能吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 16:54:23

我们可以用矢量化(不循环)的方式来实现:

代码语言:javascript
复制
In [11]: df['median_group_error'] = \
            df.groupby('group')['estimation_error'].transform('median')

In [12]: df
Out[12]:
          group  estimation_error  median_group_error
170  64.22-1-00          0.061829            2.242214
72   64.22-1-00          2.242214            2.242214
121  35.12-3-00         31.960277           16.405437
99   64.22-1-00          4.819315            2.242214
19   35.12-3-00          0.850597           16.405437
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44808468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档