第一行的累计减法

时间:2018-10-12 03:54:59

标签: python algorithm pandas math matrix

我有一个系列和一个DataFrame,都是整数。

s = [10,
     10,
     10]

m = [[0,0,0,0,3,4,5],
     [0,0,0,0,1,1,1],
     [10,0,0,0,0,5,5]]

我想返回一个包含累积差异的矩阵来代替现有数字。

输出:

n = [[10,10,10,10,7,3,-2],
     [10,10,10,10,9,8,7],
     [0,0,0,0,0,-5,-10]]

2 个答案:

答案 0 :(得分:5)

首先按行计算数据的总和,然后从系列中减去:

import pandas as pd

s = pd.Series(s) 
df = pd.DataFrame(m)

-df.cumsum(1).sub(s, axis=0)

#    0   1   2   3  4  5   6
#0  10  10  10  10  7  3  -2
#1  10  10  10  10  9  8   7
#2   0   0   0   0  0 -5 -10

答案 1 :(得分:2)

您可以使用np.subtract.accumulate直接计算累计差异:

# make a copy
>>> n = np.array(m)
# replace first column
>>> n[:, 0] = s - n[:, 0]
# subtract in-place                                                                                           
>>> np.subtract.accumulate(n, axis=1, out=n)                                                                        
array([[ 10,  10,  10,  10,   7,   3,  -2],                                                                         
       [ 10,  10,  10,  10,   9,   8,   7],                                                                         
       [  0,   0,   0,   0,   0,  -5, -10]])