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

如何使用pandas groupby实现排除当前行的两列比值计算并生成新列

正确实现方式

你可以先用transform计算每个分组的列总和,再基于每行的数值做差值计算,该方法比逐行apply的性能更高,适合大数据量场景:

import pandas as pd

df = pd.DataFrame({'Group':['A', 'A', 'A', 'B', 'B'],
                     'Col_1':[100, 200, 300, 400, 500],
                     'Col_2':[55, 66, 77, 88, 99]})

# 计算每个分组下Col_1、Col_2的总和,返回和原DataFrame长度一致的结果
group_col1_sum = df.groupby('Group')['Col_1'].transform('sum')
group_col2_sum = df.groupby('Group')['Col_2'].transform('sum')

# 按规则计算比值
df['Div_excl'] = (group_col2_sum - df['Col_2']) / (group_col1_sum - df['Col_1'])

计算后得到的df结果如下:

GroupCol_1Col_2Div_excl
A100550.286000
A200660.330000
A300770.403333
B400880.198000
B500990.220000
原代码错误原因
  1. 你在lambda表达式中调用df['Col_2'].sum()、df['Col_1'].sum(),计算的是整个数据集的列总和,而非当前分组的列总和,逻辑不符合需求。
  2. lambda的入参x是当前分组的完整DataFrame,直接用总和减去x会出现维度不匹配的问题,无法得到逐行的计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:45:06