我有一个包含两列“ actp”和“ modr”的数据框:“ actp”包含实际价格序列,“ modr”包含该系列的预测收益。我想创建第三列“ modp”,当价格序列存在时(非NaN)获取价格序列值,或将以前的价格序列值“ actp”乘以1 +对数返回值(“ modr”)以生成预测价格值('modp'),然后将'modp'的滞后值乘以返回值。这是一个简单的问题,而且很容易使用for循环解决。我想知道高效,优雅的解决方案的外观,因为我需要对其进行优化以提高速度和可扩展性。
我可以使用for循环来完成此操作,尽管当'actp'中包含值时,它确实不会将'actp'中的实际值添加到'modp'中。
for i in range(2,5):
df['modp'].iloc[i] = df['actp'].iloc[i-1] * np.exp(df['modr'].iloc[i])
df['actp'].iloc[i] = df['modp'].iloc[i]
答案 0 :(得分:0)
如丹所言,您可以使用shift
如果我正确理解了您的计算,应该是这样:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'actp':[10,20,30,40],
'modr':[2,2,0,2]})
df['actp'] = df.actp.shift(1) * np.exp(df.modr)
print(df)
actp modr
0 NaN 2
1 73.890561 2
2 20.000000 0
3 221.671683 2