gpt4 book ai didi

python - 在下一次应用迭代 python 中使用应用 fnc 的输出

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:31 24 4
gpt4 key购买 nike

下面是 1. 开始 df(称为“关闭”),和 2. 应用代码行及其生成的 df:

1.

Date    
2006-01-27 100.0
2006-01-30 100.0
2006-01-31 100.0
2006-02-01 100.0
2006-02-02 NaN
2006-02-03 NaN

2.

close.apply(lambda x: x.shift(1) + (x.shift(4))

Date
2006-01-27 NaN
2006-01-30 NaN
2006-01-31 NaN
2006-02-01 NaN
2006-02-02 100.706786
2006-02-03 NaN

我的预期输出是使用 #2 (100.706786) 的输出和现有的 df“关闭”来计算序列中的下一个值,即 2/03 。该日期需要最后一个值(第 1 类)和从那时起的 4 个值(第 4 类或 100)。

如何只使用矢量化来做到这一点?我想避免 for 循环,因为它非常慢。这是我的:

closedf = pd.DataFrame()
for num,date in enumerate(close.index[4:]):
widget = close.apply(lambda x: x.shift(1) + (x.shift(4)).iloc[num+4]
closedf[date] = close.iloc[num+4] = widget

最佳答案

考虑一系列 close

close = pd.Series(
[100] * 3 + [100.706786] + [np.nan] * 10,
pd.date_range('2006-01-27', periods=14, name='Date')
)

close

Date
2006-01-27 100.000000
2006-01-28 100.000000
2006-01-29 100.000000
2006-01-30 100.706786
2006-01-31 NaN
2006-02-01 NaN
2006-02-02 NaN
2006-02-03 NaN
2006-02-04 NaN
2006-02-05 NaN
2006-02-06 NaN
2006-02-07 NaN
2006-02-08 NaN
2006-02-09 NaN
Freq: D, dtype: float64

解决方案
这是斐波那契数列的导数。据我所知,我们不能“向量化”...(w/e“向量化”意味着)

但是我们可以创建一个执行任务的生成器

def shib(x1, x2, x3, x4):
while True:
x1, x2, x3, x4 = x2, x3, x4, x1 + x4
yield x4

然后用它来分配新的变量

from itertools import islice

close.iloc[4:] = list(islice(shib(*close[:4]), 0, len(close) - 4))

close

Date
2006-01-27 100.000000
2006-01-28 100.000000
2006-01-29 100.000000
2006-01-30 100.706786
2006-01-31 200.706786
2006-02-01 300.706786
2006-02-02 400.706786
2006-02-03 501.413572
2006-02-04 702.120358
2006-02-05 1002.827144
2006-02-06 1403.533930
2006-02-07 1904.947502
2006-02-08 2607.067860
2006-02-09 3609.895004
Freq: D, dtype: float64

关于python - 在下一次应用迭代 python 中使用应用 fnc 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47216419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com