【问题标题】:Regarding getting the rowsum of a python data frame关于获取python数据框的行总和
【发布时间】:2019-11-27 21:12:17
【问题描述】:

我有以下 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.

【问题讨论】:

    标签: python pandas for-loop while-loop


    【解决方案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】:

      这个也可以

      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)
      

      【讨论】:

        【解决方案3】:

        使用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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-18
          • 2012-11-18
          • 1970-01-01
          • 2022-12-12
          • 1970-01-01
          • 1970-01-01
          • 2022-07-04
          • 1970-01-01
          相关资源
          最近更新 更多