Pandas中的动态累积求和

时间:2017-01-02 13:39:32

标签: python pandas dictionary replace cumsum

在以下DataFrame中,列B计算从A0的列n的总和。

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列对每个1type == 'I'的每个-1type == 'O'

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

1 个答案:

答案 0 :(得分:2)

您可以使用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

第二个dfdict添加map

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