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

基于add/sub操作记录,用Pandas计算总余额及分团队余额

问题背景

我有一个名为df的DataFrame,包含type、timestamp、value和team列。type的取值为add(增加金额)或sub(扣除金额),记录了针对特定团队的收支情况。我希望计算所有团队的总支出余额,以及各团队的单独余额。例如,我可能周一向团队A支付X,周二收回X,周五再向团队A支付Y。请问有没有简洁的Pandas实现方法?

数据示例:

TypeTimestampValueTeam
add167597143220A
add167597139250C
sub167587781315A
add167587757910D
add167587752820B
add167587712815A

简洁实现方案

核心逻辑是先给收支金额赋予正负符号,再通过分组求和得到各团队余额,最后汇总总余额。

1. 生成带符号的收支金额

用np.where区分add和sub类型,给sub的金额加上负号:

import pandas as pd
import numpy as np

df['signed_value'] = np.where(df['type'] == 'add', df['value'], -df['value'])

2. 计算各团队单独余额

按team分组后对带符号的金额求和:

team_balances = df.groupby('team')['signed_value'].sum().reset_index(name='balance')

对示例数据执行后,团队A的余额为20 -15 +15 = 20,结果如下:

Teambalance
A20
B20
C50
D10

3. 计算所有团队总余额

直接对带符号金额列求和,或从团队余额汇总:

total_balance = df['signed_value'].sum()
# 等价写法:total_balance = team_balances['balance'].sum()

示例数据的总余额为20+20+50+10=100。

一行紧凑写法

如果追求代码简洁,可以合并步骤:

# 各团队余额
team_balances = df.assign(signed_value=np.where(df['type']=='add', df['value'], -df['value']))\
                  .groupby('team')['signed_value'].sum().reset_index(name='balance')
# 总余额
total_balance = team_balances['balance'].sum()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:45:00