如何从熊猫的累计总和中取回实际价值

aer*_*ite 2 python sorting pandas

假设,我有一个 DataFrame df。

>>> DATA = {'id':[1,2,3,4,5], 'salary':[1200,2300,2400,3620,2100] } 
>>> df = DataFrame(DATA)
>>> df
   id  salary
0   1    1200
1   2    2300
2   3    2400
3   4    3620
4   5    2100
Run Code Online (Sandbox Code Playgroud)

从这个 DataFrame df,我可以得到一个新的 DataFrame df1 与工资的累积总和

>>> df['salary'] = df['salary'].cumsum() 
>>> df
   id  salary
0   1    1200
1   2    3500
2   3    5900
3   4    9520
4   5   11620
Run Code Online (Sandbox Code Playgroud)

这是很常见的场景。

现在,如果我得到 df1 并且我必须找到 df 呢?

   id  salary            id  salary
0   1    1200             0   1    1200
1   2    3500             1   2    2300
2   3    5900     ==>     2   3    2400
3   4    9520             3   4    3620
4   5   11620             4   5    2100
Run Code Online (Sandbox Code Playgroud)

我必须从其累积总和中找到所有 id 的实际工资。

beh*_*uri 5

>>> df
   id  salary
0   1    1200
1   2    3500
2   3    5900
3   4    9520
4   5   11620
>>> df['salary'] = df['salary'].diff().fillna(df['salary'].iloc[0])
>>> df
   id  salary
0   1    1200
1   2    2300
2   3    2400
3   4    3620
4   5    2100
Run Code Online (Sandbox Code Playgroud)

虽然.fillna在这里效率不高,因为它只是第一个出现 null 的值。因此,您只需要将第一个值替换为 的累积值.iloc[0]