如何将前一行的结果添加到当前行的内容?

use*_*395 2 python pandas

import pandas as pd
import numpy as np

df = pd.DataFrame({"a": [7, 2, 3], "b": [4, 5, 6], "c": [100, np.nan, np.NaN]})

df
Out[11]: 
   a  b      c
0  7  4  100.0
1  2  5    NaN
2  3  6    NaN
Run Code Online (Sandbox Code Playgroud)

对于上面的Python pandas DataFrame,我想对行号为零:计算列a和之间的差异b.其结果应添加到列的内容中c并存储在(新)列中d.

对于第一行,在第一步中,行0 /列的内容d应存储在列中c.之后应该应用与之前的行0相同的算法.

执行此操作后,生成的DataFrame将如下所示:

   a  b      c     d
0  7  4  100.0   103.
1  2  5  103.0   100.
2  3  6  100.0    97.
Run Code Online (Sandbox Code Playgroud)

实际上,数据帧比这个小例子有更多的行.因此,快速的计算速度非常重要.

计算这个新数据帧的解决方案怎么样?

sac*_*cuL 6

你可以得到的差值的累积和ab,添加到您的列c的初始值,并填充其余c与你的新计算d,向下移动1:

df['d'] = df.a.sub(df.b).cumsum().add(df.c.iloc[0])

df.loc[1:,'c'] = df.d.shift()

>>> df
   a  b      c      d
0  7  4  100.0  103.0
1  2  5  103.0  100.0
2  3  6  100.0   97.0
Run Code Online (Sandbox Code Playgroud)