Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas中是否有方法使用dataframe.apply中以前的行值,其中以前的值也在apply中计算?_Python_Pandas - Fatal编程技术网

Python Pandas中是否有方法使用dataframe.apply中以前的行值,其中以前的值也在apply中计算?

Python Pandas中是否有方法使用dataframe.apply中以前的行值,其中以前的值也在apply中计算?,python,pandas,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 ... W Y 0 1 5 1 2 7 2 3 10 3 4 14 4 5 19 5 6 27 6 7 37 ... 表中的行

我有以下数据帧:

      W    Y
 0    1    5
 1    2    NaN
 2    3    NaN
 3    4    NaN
 4    5    NaN
 5    6    NaN
 6    7    NaN
 ...
      W    Y
 0    1    5
 1    2    7
 2    3    10
 3    4    14
 4    5    19
 5    6    27
 6    7    37
 ...
表中的行一直运行到索引240。我想获得以下数据帧:

      W    Y
 0    1    5
 1    2    NaN
 2    3    NaN
 3    4    NaN
 4    5    NaN
 5    6    NaN
 6    7    NaN
 ...
      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

使用answer,我通过运行以下命令计算了前五个值:

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]

这是直截了当的,下周您仍然知道代码的作用

如果Y索引>=5,则Y的值为:Y_i+Y_{i-4}-Y_{i-5}+W_i
。这里的
Y\u i
是什么?我的坏朋友,这不应该是一个令人担忧的问题吗?假设是Y{i-1},我正在编辑我的问题
Y_6=Y_5+Y_2-Y_1+W_6=27+10-7+7=37