首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >模拟新行,Python比SAS慢很多,怎么加速?

模拟新行,Python比SAS慢很多,怎么加速?
EN

Stack Overflow用户
提问于 2018-06-05 03:18:54
回答 2查看 485关注 0票数 0

这就是一个模型实现任务的问题所在。假设我有一些数据。我需要模拟一些新的数据,一些变量值依赖于前一行的值和一个随机数r。

例如,假设我有

AsOfDate  Var1  Var2    r
6/4/2018    A   0.3     0.2

创建两行,则输出将为

AsOfDate    Var1    Var2    r
6/4/2018    A       0.3    0.2
6/5/2018    B       0.06   0.95
6/6/2018    A       0.057

逻辑是,从6/4 r=0.2开始小于Var2,然后从6/5 Var1=B开始,Var2=0.3*0.2=0.06。从6/5开始,r=0.95大于Var2,然后是6/6 Var1=A,Var=0.06*0.95=0.057。

如果我把你弄糊涂了,我向你道歉。但我正在尽我最大的努力来描述这一切。我想不出一种不使用for循环的方法。我运行以下简单的SAS和Python代码只是为了比较速度。令我惊讶的是,python/Pandas比SAS数据步长要低得多。我不是Python专家,所以我想知道是否有更好的方法来做到这一点,并使其运行得更快。提前感谢您的帮助。

a=pd.DataFrame(data={'id':[1],'val':[2]})
tick=time.time()
n=0
b=pd.DataFrame()
for n in range(10000):
    a['id']=a['id']+1
    a['val']=a['val']+(n+1)
    b=pd.concat([b,a])
tock=time.time()
print(tock-tick)

耗时: 7.54027533531189秒

data test;
input id val;
datalines;
1 2
;
run;

%let _timer_start = %sysfunc(datetime());

data test(drop=i);
    set test;
    do i=1 to 10000;
        id=id+1;
        val=val+(i+1);
        output;
    end;
run;

data _null_;
  dur = datetime() - &_timer_start;
  put 30*'-' / ' TOTAL DURATION:' dur time13.2 / 30*'-';
run;

耗时: 0.01秒

EN

回答 2

Stack Overflow用户

发布于 2018-06-05 03:40:57

最直接的答案是:因为您选择了效率最低的方式:)

也就是说,这段代码(没有真正优化):

import time
import pandas as pd
tick=time.time()
n=0
a = {
    'id': 1,
    'val': 2,
}
data = []
for n in range(10000):
    a['id'] = a['id']+1
    a['val'] = a['val']+(n+1)
    data.append([a['id'], a['val']])
df = pd.DataFrame(data, columns=['id', 'val'])
tock=time.time()
print(tock-tick)

做同样的事情(除非我犯了一些愚蠢的错误),比sas快几百倍,可能不会比sas慢多少。

票数 1
EN

Stack Overflow用户

发布于 2018-06-05 04:01:20

如果可以,在pandas之外构建数据

from itertools import accumulate
a = list(range(2, 10002))
b = [2+i for i in accumulate(range(1,10001))]
df = pd.DataFrame(data={'id':a,'val':b})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687403

复制
相关文章

相似问题

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