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

在Pandas GroupBy Transform中获取分组名称并优化数据计算

解决方案

方法1:使用groupby + transform正确获取分组名称

你之前的问题在于,当对整个DataFrame按cat分组时,transform接收的参数是整个分组的DataFrame,而非单列。此时分组的名称可以通过group.name直接获取(也就是分类标签1或2),而非你尝试的x.name(那是单列分组时的列名)。

正确代码如下:

result = df.groupby(cat).transform(lambda group: group - df_ref.loc[group.name])
print(result)

输出:

A   B   C
0 -10  -9  -8
1  -7  -6  -5
2   6   7   8
3   9  10  11

方法2:向量化操作(更高效)

相比groupby,直接通过索引对齐实现向量化运算效率更高,无需额外分组操作,适合大规模数据场景:

# 方式1:将参考行与原数据行对齐后相减
result = df - df_ref.reindex(cat).reset_index(drop=True)

# 方式2:直接提取对应参考行的数值数组进行运算
result = df - df_ref.loc[cat].values

两种方式都能得到和循环、groupby一致的结果,且性能更优。

原代码失败原因

你之前的lambda x: x - df_ref.loc[x.GROUP_NAME]存在两个问题:

  • 对DataFrame按行分组时,x是分组后的子DataFrame,不存在GROUP_NAME属性;
  • x.name返回列名的前提是按列分组,但这里是按cat对行分组,x.name本身就是分组的分类标签(1或2),但你误将x当成了单列Series,导致逻辑混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:31:06