首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大于零和小于零的数据

大于零和小于零的数据
EN

Stack Overflow用户
提问于 2022-02-16 00:26:24
回答 1查看 1.1K关注 0票数 0

我有一个这样大的数据集,有几百万行。我想做点什么来快速地应用到这个数据中。

代码语言:javascript
复制
df value
   10
   -1
   20
   ...
   -3
   -4
   -50
   12

我想知道最有效的方法,以确定值是否大于0,值将* 2。如果值小于0,则值将*3。

代码语言:javascript
复制
df value
   20
   -3
   40
   ...
   -9
   -12
   -150
   24

我的剧本是

代码语言:javascript
复制
dff = df.value
for i in range(len(dff)):
   if dff[i] > 0:
         dff[i] = dff[i] * 2
   elif dff[i] < 0:
         dff[i] = dff[i] * 3
EN

回答 1

Stack Overflow用户

发布于 2022-02-16 00:36:43

s是:

代码语言:javascript
复制
s = pd.Series(np.random.randint(-10,11,10**6))

最佳解决办法:

代码语言:javascript
复制
y = np.where(s > 0, s * 2, s * 3)

计时:

代码语言:javascript
复制
CPU times: user 11.3 ms, sys: 2.21 ms, total: 13.5 ms
Wall time: 11.8 ms

你的解决方案:

代码语言:javascript
复制
%%time
for i in range(len(s)):
    if s[i] > 0:
        s[i] = s[i] * 2
    elif s[i] < 0:
        s[i] = s[i] * 3

计时:

代码语言:javascript
复制
CPU times: user 17.7 s, sys: 51.3 ms, total: 17.8 s
Wall time: 17.9 s

另一种选择:

代码语言:javascript
复制
%%time
y = s.map(lambda x: x*2 if x>0 else x*3)

计时:

代码语言:javascript
复制
CPU times: user 308 ms, sys: 37.5 ms, total: 345 ms
Wall time: 371 ms

另一种选择:

代码语言:javascript
复制
%%time
mask = s>0
y = s.where(mask, s * 2).where(~mask, s * 3)

计时:

代码语言:javascript
复制
CPU times: user 31 ms, sys: 7.43 ms, total: 38.4 ms
Wall time: 37.2 ms
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71135043

复制
相关文章

相似问题

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