【问题标题】:Pandas assign the groupby sum value to the last row in the original tablePandas 将 groupby 和值分配给原始表中的最后一行
【发布时间】:2026-02-19 17:30:01
【问题描述】:

例如,我有一张桌子

一个

id  price sum
1     2    0
1     6    0
1     4    0
2     2    0
2     10   0
2     1    0
2     5    0
3     1    0
3     5    0

我想要的是这样的(sum的最后一行应该是一组price的总和)

id  price sum
1     2    0
1     6    0
1     4    12
2     2    0
2     10   0
2     1    0
2     5    18
3     1    0
3     5    6

我能做的是找出总和使用

A['price'].groupby(A['id']).transform('sum')

但是我不知道如何将其分配给sum 列(最后一行)。

谢谢

【问题讨论】:

    标签: python pandas indexing group-by sum


    【解决方案1】:

    使用last_valid_index 定位要填充的行

    g = df.groupby('id')
    l = pd.DataFrame.last_valid_index
    df.loc[g.apply(l), 'sum'] = g.price.sum().values
    df
    
       id  price  sum
    0   1      2    0
    1   1      6    0
    2   1      4   12
    3   2      2    0
    4   2     10    0
    5   2      1    0
    6   2      5   18
    7   3      1    0
    8   3      5    6
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      df.assign(sum=df.groupby('id')['price'].transform('sum').drop_duplicates(keep='last')).fillna(0)
      

      df['sum'] = (df.groupby('id')['price']
                     .transform('sum')
                     .mask(df.id.duplicated(keep='last'), 0))
      

      输出:

         id  price   sum
      0   1      2   0.0
      1   1      6   0.0
      2   1      4  12.0
      3   2      2   0.0
      4   2     10   0.0
      5   2      1   0.0
      6   2      5  18.0
      7   3      1   0.0
      8   3      5   6.0
      

      【讨论】:

        最近更新 更多