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

如何对pandas分组对象执行列的减法与除法运算?

解决方案

首先纠正你写的groupby语法错误:正确的分组方式是使用括号df.groupby('Name'),而非方括号df.groupby['Name']。

针对你的需求,我们可以通过自定义聚合函数或者分步聚合后计算两种方式实现:

方式一:自定义聚合函数

先定义一个处理每个分组的函数,实现(Col_1总和 - Col_2值) / Col_3值的计算逻辑(假设同一Name分组内的Col_2和Col_3值一致,取组内第一个值即可):

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'Name': ['A', 'B', 'B'],
    'Col_1': [3, 1, 3],
    'Col_2': [5, 6, 6],
    'Col_3': [5, 7, 7]
})

def compute_metric(group):
    sum_col1 = group['Col_1'].sum()
    col2 = group['Col_2'].iloc[0]  # 取组内第一个Col_2值
    col3 = group['Col_3'].iloc[0]  # 取组内第一个Col_3值
    return (sum_col1 - col2) / col3

# 应用分组聚合
result_series = df.groupby('Name').apply(compute_metric)
print(result_series)

输出结果:

Name
A   -0.400000
B    0.000000
dtype: float64

方式二:分步聚合后计算

先对分组后的各列分别聚合,再通过算术运算得到最终结果:

# 分组聚合各列
agg_df = df.groupby('Name').agg(
    sum_col1=('Col_1', 'sum'),
    col2=('Col_2', 'first'),  # 若分组内Col_2值不同,可替换为'sum'/'mean'等
    col3=('Col_3', 'first')
)

# 计算目标值并转换为Series
result_series = (agg_df['sum_col1'] - agg_df['col2']) / agg_df['col3']
print(result_series)

输出结果和方式一完全一致。

补充说明

如果你的场景中同一Name分组内的Col_2或Col_3存在不同值,只需将聚合逻辑中的'first'替换为你需要的统计方式即可(比如'sum'求和、'mean'取平均值等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:00:53