python - Pandas - 动态生成列中的值并在下一行中实时使用它们

标签 python pandas time-series

我有一个如下所示的 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/

相关文章:

python - 基于2个元素的列表去重列表

python - 在给定到达和离开时间矩阵的情况下,想出给定时间排队的人数?

c# - 时间序列和关联策略

在C中压缩一系列接近的数字

python - 是否可以删除(不仅仅是取消链接)类(class)?

Python并发executor.map()和submit()

python - Pandas :如何在pd.DataFrame.plot()的x轴上显示次要网格线

python - 如何在 Django 用户名中允许空格?

python - 编码斯洛伐克语字母,如 : á š Č é

python - 在循环中迭代数据帧行