关于获取python数据帧的行和

时间:2019-07-18 21:32:57

标签: python pandas for-loop while-loop

我有以下python数据框

data={'1':[1,1,1,1],'2':[1,1,1,1],'3':[1,1,1,1]}
df=pd.DataFrame(data)

enter image description here

我需要获得行的总和,这样我的最终输出应该是这样的

enter image description here

因此,在此所需的输出中,第二列应包含直到原始数据帧的第二列为止的行总和。等等。

要获得此输出,我编写了以下代码,

sum_mat=np.zeros(shape=(3,3))

numOfIteration=3
itr=list(range(0,numOfIteration))

for i in range(0,3):
    for j in range(0,3):
        while i <= itr[i]:
            sum_mat[i,j]+= df.iloc[i,j]

print (sum_mat)

我在这里没有得到输出,因为代码一直在运行(可能是无限循环)。

任何人都可以提出任何建议以获取所需的输出吗?

也许有一种更有效,更轻松的方法来做同样的事情。

谢谢

更新: 我按如下方式更新for循环,

for i in range(0,3):
   for j in range(0,3):
        while i <= itr[i]:
           sum_mat[i,j] = df.iloc[:,0:i].sum(axis=1)

但它给出以下错误,

sum_mat[i,j] = df.iloc[:,0:i].sum(axis=1)
ValueError: setting an array element with a sequence.

3 个答案:

答案 0 :(得分:2)

这也可以

for i,row in df.iterrows(): #go through each row
    df.loc[i]=df.loc[i].cumsum() #assign each row as the cumulative sum of the row

输出:

>>> df
   1  2  3
0  1  2  3
1  1  2  3
2  1  2  3
3  1  2  3

编辑

可以做到:

df=df.cumsum(axis=1)

答案 1 :(得分:1)

sum_mat=np.zeros(shape=(3,3))

numOfIteration=3
itr=list(range(0,numOfIteration))

for i in range(0,3):
    for j in range(0,3):
            if j==0:
               sum_mat[i,0]=df.iloc[i,0]
            else:
               sum_mat[i,j]=df.iloc[i,j]+sum_mat[i,j-1]

print (sum_mat)

这应该有效

答案 2 :(得分:1)

使用cumsum()函数查找到目前为止沿列轴看到的值的累积和。

例如。

import pandas as pd

data = {'1': [1, 1, 1, 1], '2': [1, 1, 1, 1], '3': [1, 1, 1, 1]}
df = pd.DataFrame(data)
print("before")
print(df)

df = df.cumsum(axis=1)
print("after")
print(df)

O / P:

之前

   1  2  3
0  1  1  1
1  1  1  1
2  1  1  1
3  1  1  1

之后

   1  2  3
0  1  2  3
1  1  2  3
2  1  2  3
3  1  2  3