我有一个如下所示的 DataFrame:
Date Score Duration_Diff
2019-05-11 25 0
2019-05-14 30 0.1
2019-06-19 20 1.01
2019-07-23 56 1.04
Duration_Diff
列以月为单位。现在我乘以时间衰减因子来更新分数。但是我想实时使用更新的分数并在下一行中使用它。
例如:对于索引 1,由于我们没有任何先前的日期,因此它将保持不变。对于索引位置 2,假设我将因子 e^-0.1
乘以 25,因此更新后的分数变为 (25*e^-0.1+30)/2=26.3
。现在,对于索引位置 3,我想将时间因子乘以 26.3,而不是乘以 30,接下来的其他行也类似。
我现在的代码考虑前一行中的静态值,而不是动态更新的值。我无法想出一个实时考虑动态更新值的逻辑,因此我需要一些帮助来了解如何将它们用于下一行?
最佳答案
我建议使用numba
为了提高循环性能:
from numba import jit
import math
@jit(nopython=True)
def func(a):
for i in range(1, a.shape[0]):
a[i] = (a[i-1, 0] * math.exp(-a[i, 1]) + a[i, 0]) / 2
return a[:, 0]
df['score'] = func(df[['score','dur']].values)
print(df)
score dur
0 25.000000 0.00
1 26.310468 0.10
2 14.791386 1.01
3 30.614042 1.04
关于python - Pandas - 动态生成列中的值并在下一行中实时使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451735/