我有以下python数据框
data={'1':[1,1,1,1],'2':[1,1,1,1],'3':[1,1,1,1]}
df=pd.DataFrame(data)
我需要获得行的总和,这样我的最终输出应该是这样的
因此,在此所需的输出中,第二列应包含直到原始数据帧的第二列为止的行总和。等等。
要获得此输出,我编写了以下代码,
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.
答案 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