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