首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种人工种植数据的方法

一种人工种植数据的方法
EN

Stack Overflow用户
提问于 2015-08-13 22:09:35
回答 1查看 520关注 0票数 0

所以,我有一个年索引数据,我想用一些逻辑在年底(2013)之后增加,比如说,将最后的值增长n%,在10年内,但是逻辑也可以是添加一个常数,或者稍微增长的数字。我会把它留给一个函数,然后把逻辑塞进去。

我想不出一种用任意时间和逻辑来实现这一点的简洁的矢量化方法,留下了一个更长的数据空间,并添加了额外的增量,而且我更不喜欢循环它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-13 22:26:47

具体的计算很重要。通常,您必须计算循环中的值。但是,一些NumPy实用程序(如np.addnp.multiplynp.minimumnp.maximum)有一个方法,这可能会根据计算的不同而有用。

例如,要计算给定恒定增长率的值,可以使用np.multiply.accumulate (或cumprod):

代码语言:javascript
复制
import numpy as np
import pandas as pd
N = 10
index = pd.date_range(end='2013-12-31', periods=N, freq='D')
df = pd.DataFrame({'val':np.arange(N)}, index=index)
last = df['val'][-1]
#             val
# 2013-12-22    0
# 2013-12-23    1
# 2013-12-24    2
# 2013-12-25    3
# 2013-12-26    4
# 2013-12-27    5
# 2013-12-28    6
# 2013-12-29    7
# 2013-12-30    8
# 2013-12-31    9

# expand df
index = pd.date_range(start='2014-1-1', periods=N, freq='D')
df = df.reindex(df.index.union(index))

# compute new values
rate = 1.1
df['val'][-N:] = last*np.multiply.accumulate(np.full(N, fill_value=rate))

收益率

代码语言:javascript
复制
                  val
2013-12-22   0.000000
2013-12-23   1.000000
2013-12-24   2.000000
2013-12-25   3.000000
2013-12-26   4.000000
2013-12-27   5.000000
2013-12-28   6.000000
2013-12-29   7.000000
2013-12-30   8.000000
2013-12-31   9.000000
2014-01-01   9.900000
2014-01-02  10.890000
2014-01-03  11.979000
2014-01-04  13.176900
2014-01-05  14.494590
2014-01-06  15.944049
2014-01-07  17.538454
2014-01-08  19.292299
2014-01-09  21.221529
2014-01-10  23.343682

若要以常量值递增,只需使用np.arange

代码语言:javascript
复制
step=2
df['val'][-N:] = np.arange(last+step, last+(N+1)*step, step)

cumsum

代码语言:javascript
复制
step=2
df['val'][-N:] = last + np.full(N, fill_value=step).cumsum()

一些线性递推关系可以用scipy.signal.lfilter表示。例如,参见尝试用numpy矢量化迭代计算Pandas中的递归定义

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31999262

复制
相关文章

相似问题

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