Pandas 中的动态累积求和

Dynamic cumulative summations in Pandas

在下面的 DataFrame 中,列 B 计算从索引 0n 的列 A 的总和。

ix    A      B
---------------
 0     1     1
 1     1     2
 2     1     3
 3     1     4
 4     2     6
 5    -1     5
 6    -3     2

或者,B 列对每个 type == 'I' 求和 1,对每个 type == 'O' 求和 -1

ix   type     B
----------------
 0      I     1
 1      I     2
 2      O     1
 3      I     2
 4      O     1
 5      O     0
 6      I     1

如何执行此类计算,其中一列的 n-th 结果取决于另一列的聚合结果,最多 n?

您可以使用 cumsum:

df['C'] = df.A.cumsum()
print (df)
   ix  A  B  C
0   0  1  1  1
1   1  1  2  2
2   2  1  3  3
3   3  1  4  4
4   4  2  6  6
5   5 -1  5  5
6   6 -3  2  2

对于第二个 df 添加 map by dict:

df['C'] = df.type.map({'I':1, 'O':-1}).cumsum()
print (df)
   ix type  B  C
0   0    I  1  1
1   1    I  2  2
2   2    O  1  1
3   3    I  2  2
4   4    O  1  1
5   5    O  0  0
6   6    I  1  1

或:

df['C'] = df.type.replace({'I':1, 'O':-1}).cumsum()
print (df)
   ix type  B  C
0   0    I  1  1
1   1    I  2  2
2   2    O  1  1
3   3    I  2  2
4   4    O  1  1
5   5    O  0  0
6   6    I  1  1