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

如何基于指定分组列计算DataFrame中唯一值的Running Total?

解决方案

要实现按Name和Date分组,计算Total Fee唯一值的累计求和(Running Total),可以通过以下步骤用Pandas完成:

步骤说明

  1. 标记每个分组内Total Fee的首次出现记录
  2. 仅保留首次出现的Total Fee值,重复项设为0
  3. 对处理后的数值按分组做累计求和

完整代码

import pandas as pd

# 构造示例DataFrame
data = {
    'Name': ['汤姆', '汤姆', '汤姆', '汤姆', '马特'],
    'Product': ['香蕉', '苹果', '香蕉', '香蕉', '香蕉'],
    'Date': ['2021-01-01', '2021-01-01', '2021-02-01', '2021-02-01', '2021-02-01'],
    'Location': ['纽约', '纽约', '德克萨斯', '德克萨斯', '纽约'],
    'Type': ['水果', '水果', '水果', '水果', '水果'],
    'Sales': [120, 120, 420, 120, 30],
    'Ship Fee %': [0.01, 0.01, 0.01, 0.01, 0.01],
    'Total Fee': [1.2, 1.2, 4.2, 1.2, 0.3]
}
df = pd.DataFrame(data)

# 标记分组内Total Fee的首次出现
df['is_first'] = df.groupby(['Name', 'Date'])['Total Fee'].transform(lambda x: ~x.duplicated())

# 生成临时列,仅保留首次出现的Fee值
df['temp_fee'] = df['Total Fee'].where(df['is_first'], 0)

# 按分组计算累计和得到Running Total
df['Running Total'] = df.groupby(['Name', 'Date'])['temp_fee'].cumsum()

# 清理临时列
df.drop(['is_first', 'temp_fee'], axis=1, inplace=True)

# 输出结果
print(df)

输出结果

NameProductDateLocationTypeSalesShip Fee %Total FeeRunning Total
汤姆香蕉2021-01-01纽约水果1200.011.21.2
汤姆苹果2021-01-01纽约水果1200.011.21.2
汤姆香蕉2021-02-01德克萨斯水果4200.014.24.2
汤姆香蕉2021-02-01德克萨斯水果1200.011.25.4
马特香蕉2021-02-01纽约水果300.010.30.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:48:23