【问题标题】:How to perform cumulative sum inside iterrows如何在 iterrows 内执行累积和
【发布时间】:2020-04-07 21:35:18
【问题描述】:

我有一个如下的熊猫数据框:

df2 = pd.DataFrame({ 'b' : [1, 1, 1]})
df2

    b
0   1
1   1
2   1

我想用第 2 行开始的 b 列的累积总和创建一个列“cumsum”。我还想使用 iterrows 来执行此操作。我尝试了下面的代码,但它似乎不起作用。

for row_index, row in df2.iloc[1:].iterrows():
    df2.loc[row_index, 'cumsum'] = df2.loc[row_index, 'b'].cumsum()

我的预期输出:

    b   cum_sum
0   1   NaN
1   1   2
2   1   3

【问题讨论】:

  • 为什么不df['b'].cumsum()
  • 我想使用 iterrows
  • 您可以添加枚举并执行以下操作:df.iloc[i-1, "cumsum"]+df2.loc[row_index, 'b']。为什么 iterrows 呢?
  • 为什么需要 iterrows?

标签: python-3.x pandas


【解决方案1】:

根据您的要求,您可以试试这个

for row_index, row in df2.iloc[1:].iterrows():
    df2.loc[row_index, 'cumsum'] = df2.loc[:row_index, 'b'].sum()

Out[10]:
   b  cumsum
0  1     NaN
1  1     2.0
2  1     3.0

【讨论】:

    【解决方案2】:

    坚持iterrows()

    i=0
    df2['cumsum']=0
    col=list(df2.columns).index('cumsum')
    for row_index, row in df2.iloc[1:].iterrows():
        df2.loc[row_index, 'cumsum'] = df2.loc[row_index, 'b']+df2.iloc[i, col]
        i+=1
    

    输出:

       b  cumsum
    0  1       0
    1  1       1
    2  1       2
    

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多