You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将groupby聚合结果添加至原DataFrame对应组尾新列

按组求和并仅在每组末尾显示结果的实现方案

给定初始DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A':[1,1,2,2],'values':np.arange(10,30,5)})

需求是:按列A分组计算values的求和值,将结果存入新列sum_values_A,且仅在每组的最后一行显示该求和值,其余行填充NaN。

你尝试的代码无法实现需求,因为groupby('A')['sum_values_A'].unique()会将每组转换为单个值的Series,无法与原DataFrame的行索引对齐,导致赋值失败。

以下是两种可行的实现方式:

方法一:定位每组最后一行赋值

先初始化新列为NaN,再计算每组求和值并仅赋值给每组的最后一行:

# 初始化新列为NaN
df['sum_values_A'] = np.nan
# 获取每组最后一行的索引,赋值对应组的求和值
group_sums = df.groupby('A')['values'].sum()
last_rows_idx = df.groupby('A').tail(1).index
df.loc[last_rows_idx, 'sum_values_A'] = group_sums.values

方法二:结合transform与cumcount筛选

先通过transform得到每组的求和值,再利用cumcount判断是否为每组最后一行,保留对应值并将其他行设为NaN:

# 先得到每组的求和值,填充到所有行
df['sum_values_A'] = df.groupby('A')['values'].transform('sum')
# 筛选出每组非最后一行的行,将对应sum_values_A设为NaN
df.loc[~df.groupby('A').cumcount(ascending=False).eq(0), 'sum_values_A'] = np.nan

执行上述任意一种方法后,得到的DataFrame结果如下:

A  values  sum_values_A
0   1      10           NaN
1   1      15          25.0
2   2      20           NaN
3   2      25          45.0

内容的提问来源于stack exchange,提问作者meg hidey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:36:03