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

如何用Pandas实现R中data.table的分组条件求和并保留原表行数?

Pandas实现分组条件求和并添加新列的简洁方法

完全可以用groupby.transform直接实现,不用先分组计算再合并回原表——你之前觉得条件求和没法用transform,其实是没找对正确的写法。

这里给两种简洁的实现方式,都能直接生成和原表行数一致的新列:

方法1:在transform中用lambda做组内条件筛选求和

import pandas as pd

# 准备示例数据
df = pd.DataFrame({
    'id': [1, 1, 2, 2, 3],
    'category': ['cat1', 'cat2', 'cat1', 'cat1', 'cat2'],
    'amount': [10, 20, 30, 40, 50]
})

# 核心代码:按id分组,筛选组内category为cat1的amount求和,结果广播到原表每一行
df['cat1_total'] = df.groupby('id')['amount'].transform(
    lambda x: x[df.loc[x.index, 'category'] == 'cat1'].sum()
)

方法2:构造条件乘积后用transform求和(逻辑更直观)

先把category的匹配条件转为布尔值,和amount相乘后再求和,可读性更强:

# 直接在transform里完成条件判断与求和
df['cat1_total'] = df.groupby('id').transform(
    lambda g: (g['amount'] * (g['category'] == 'cat1')).sum()
)

两种方法运行后,原表都会新增cat1_total列:每一行对应其所在id组内所有category为cat1的amount总和,比如id=1的两行都会显示10,id=2的两行显示70,id=3的行显示0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:54:24