我有一个叫做塔吉特的数据:
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的新列,它是同一组的行的错误中值。看起来是这样的:
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我做到了以下几点:
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循环:
target['group_median_error']=(groups.get_group(target.group)).estimation_error.median()但是,它会导致以下错误:
TypeError: 'Series' objects are mutable, thus they cannot be hashed而不是我想问的问题:
for循环的情况下执行同一操作?发布于 2017-06-28 16:54:23
我们可以用矢量化(不循环)的方式来实现:
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.405437https://stackoverflow.com/questions/44808468
复制相似问题