如何有效地将数据框中特定列的行值与其自身的滞后值相乘

时间:2019-04-23 10:34:06

标签: python pandas loops dataframe

我有一个包含两列“ 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]

original data

The expected outcome

1 个答案:

答案 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