python - Pandas 有没有办法在 dataframe.apply 中使用先前的行值,其中先前的值也在 apply 中计算?

标签 python pandas

我有以下数据框:

      W    Y
 0    1    5
 1    2    NaN
 2    3    NaN
 3    4    NaN
 4    5    NaN
 5    6    NaN
 6    7    NaN
 ...

因为表行一直持续到索引 240。我想获取以下数据帧:

      W    Y
 0    1    5
 1    2    7
 2    3    10
 3    4    14
 4    5    19
 5    6    27
 6    7    37
 ...

请注意,W的值是任意的(只是为了让这里的计算更容易,实际上在我的实际程序中它们是np.random.normal)。
或者换句话说:
如果Y索引为0,那么Y的值为5;
如果 Y 索引介于 1 和 4 之间(包含),则 Y_i 是 Y 中的前一个元素与 W 中的当前元素之和。
如果 Y 索引 >=5,则 Y 的值为:Y_{i-1} + Y_{i-4} - Y_{i-5} + W_i

使用 iipr回答我已经成功地通过运行计算前五个值:

def calculate(add):
    global value
    value = value + add
    return value

df.Y = np.nan
value = 5
df.loc[0, 'Y'] = value
df.loc[1:5, 'Y'] = df.loc[1:5].apply(lambda row: calculate(*row[['W']]), axis=1)

但我还没有设法计算其余的值(其中索引>=5)。
有人有什么建议吗?

最佳答案

在这种情况下我不建议使用apply
为什么不简单地使用两个循环,对于每个不同定义的范围:

for i in df.index[1:5]:
    df.loc[i, 'Y'] = df.W.loc[i] + df.Y.loc[i-1]
for i in df.index[5:]:
    df.loc[i, 'Y'] = df.W.loc[i] + df.Y.loc[i-1] + df.Y.loc[i-4] - df.Y.loc[i-5]

这很简单,下周你仍然知道代码的作用。

关于python - Pandas 有没有办法在 dataframe.apply 中使用先前的行值,其中先前的值也在 apply 中计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54160075/

相关文章:

python - 无法在 Fedora23 中安装 Pillow

python - 默认情况下系统 PIP 而不是 virtualenv PIP?

python - 传递 Pandas 数据时,Scipy linregress 返回元组

python - 如何使用一张图表上显示的两个字典中的值来注释 pandas 条形图?

Python:转换 pandas 数据框,使索引和列 id 成为行的元素

python - 如何在 python 中使用正则表达式替换字符串的多个单词?

python - 如何循环遍历集合,同时从 Python 3 中的集合中删除项目

python - Pandas groupby 结果形状出乎意料

python - 在 python 中操作数据帧以进行 Glicko 计算

python - 使用正则表达式和 python 解析命令