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

如何在pandas的groupby.agg中为特定分组添加指定值?

问题场景与需求

处理文件后得到如下DataFrame和独立数值val=20.0:

df = pd.DataFrame({
        'A': ['foo', 'foo', 'foo', 'fizz', 'fizz', 'fizz', 'fizz'],
        'B': ['bar', 'bar', 'bar', 'buzz', 'buzz', 'buzz', 'baz'],
        'C': [10,10,10,10,10,10,10]
        })

val = 20.0

其中val是从文件中提取并转换为float的数值,提取逻辑如下:

if len(df.loc[df['ID'].eq("Settle"), 'C'].values) > 0:
    temp = df.loc[df['ID'].eq("Settle"), 'C']
    if temp.values[0].isnumeric():
        num = float(temp.values[0])
    else:
        num = 0.0
else:
    num = 0.0

需要按A列分组对C列求和,且当A=='foo'时,需将val加到该组的求和结果中,期望输出:

A     C
foo   50
fizz  40
解决方案

方法一:先分组求和,再修改目标组

先执行基础分组求和,再定位到A='foo'的行,将C列的值加上val:

import pandas as pd

# 初始化数据
df = pd.DataFrame({
        'A': ['foo', 'foo', 'foo', 'fizz', 'fizz', 'fizz', 'fizz'],
        'B': ['bar', 'bar', 'bar', 'buzz', 'buzz', 'buzz', 'baz'],
        'C': [10,10,10,10,10,10,10]
        })
val = 20.0

# 基础分组求和
out = df.groupby(['A'], sort=False, as_index=False).agg({"C":"sum"})
# 给foo组的C值加上val
out.loc[out['A'] == 'foo', 'C'] += val

print(out)

方法二:在agg中直接用lambda处理

通过lambda函数判断分组名称,直接在聚合时完成加值操作:

import pandas as pd

# 初始化数据
df = pd.DataFrame({
        'A': ['foo', 'foo', 'foo', 'fizz', 'fizz', 'fizz', 'fizz'],
        'B': ['bar', 'bar', 'bar', 'buzz', 'buzz', 'buzz', 'baz'],
        'C': [10,10,10,10,10,10,10]
        })
val = 20.0

# 分组聚合时判断处理
out = df.groupby(['A'], sort=False, as_index=False).agg(
    C=('C', lambda x: x.sum() + val if x.name == 'foo' else x.sum())
)

print(out)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:33:25