首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加快潘达的应用功能

加快潘达的应用功能
EN

Stack Overflow用户
提问于 2015-07-12 02:49:51
回答 1查看 7.1K关注 0票数 6

对于一个相对较大的Pandas DataFrame (几个100 k行),我希望创建一个应用函数的结果系列。问题是这个函数的速度不是很快,我希望它能以某种方式加速。

代码语言:javascript
复制
df = pd.DataFrame({
 'value-1': [1, 2, 3, 4, 5],
 'value-2': [0.1, 0.2, 0.3, 0.4, 0.5],
 'value-3': somenumbers...,
 'value-4': more numbers...,
 'choice-index': [1, 1, np.nan, 2, 1]
})

def func(row):
  i = row['choice-index']
  return np.nan if math.isnan(i) else row['value-%d' % i]

df['value'] = df.apply(func, axis=1, reduce=True)

# expected value = [1, 2, np.nan, 0.4, 5]

欢迎任何建议。

更新

通过预缓存所选列,可以实现非常小的加速比(~1.1)。func将改为:

代码语言:javascript
复制
cached_columns = [None, 'value-1', 'value-2', 'value-3', 'value-4']
def func(row):
  i = row['choice-index']
  return np.nan if math.isnan(i) else row[cached_columns[i]]

但我希望有更多的加速..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-12 03:38:19

我想我找到了一个很好的解决办法(加速~150)。

诀窍不是使用apply,而是进行明智的选择。

代码语言:javascript
复制
choice_indices = [1, 2, 3, 4]
for idx in choice_indices:
  mask = df['choice-index'] == idx
  result_column = 'value-%d' % (idx)
  df.loc[mask, 'value'] = df.loc[mask, result_column]
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31363908

复制
相关文章

相似问题

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