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)
实际上,数据帧比这个小例子有更多的行.因此,快速的计算速度非常重要.
计算这个新数据帧的解决方案怎么样?
你可以得到的差值的累积和a和b,添加到您的列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)