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

基于Game_ID实现仅单次统计的CumSum累计求和需求

解决基于Game_ID的唯一Shot_Count累计求和问题

我来帮你搞定这个需求!核心是每个Game_ID对应的Shot_Count只统计一次,不管它在原始数据里重复出现多少次,最终生成累计求和的CumSum_Shots列。下面用Python的Pandas库来实现,步骤清晰易懂:

思路拆解

  1. 先提取每个Game_ID对应的唯一Shot_Count值(因为同一Game_ID的Shot_Count是重复的,取其中一个即可)
  2. 对这些唯一的Shot_Count值按Game_ID的顺序计算累计和
  3. 把计算好的累计和映射回原始数据集的每一行

代码实现(附示例)

1. 创建示例数据集

先模拟你提到的数据集,方便演示效果:

import pandas as pd

data = {
    "Name": ["Player A", "Player A", "Player A", "Player A"],
    "Game_ID": [1, 1, 2, 2],
    "Shot_Count": [20, 20, 13, 13]
}
df = pd.DataFrame(data)

2. 简洁版实现(一行核心代码)

用groupby+transform的组合可以快速完成,非常高效:

# 对每个Game_ID取第一个Shot_Count(即唯一值),再计算累计和
df["CumSum_Shots"] = df.groupby("Game_ID")["Shot_Count"].transform("first").cumsum()

3. 分步版实现(更易理解)

如果想更清楚看到每一步的过程,可以拆分成两步:

# 第一步:提取每个Game_ID的唯一Shot_Count并计算累计和
unique_game_data = df.drop_duplicates(subset=["Game_ID"])[["Game_ID", "Shot_Count"]]
unique_game_data["CumSum_Shots"] = unique_game_data["Shot_Count"].cumsum()

# 第二步:把累计和合并回原始数据
df = df.merge(unique_game_data[["Game_ID", "CumSum_Shots"]], on="Game_ID", how="left")

最终效果

运行代码后,你的数据集会变成这样:

Name  Game_ID  Shot_Count  CumSum_Shots
0  Player A        1          20            20
1  Player A        1          20            20
2  Player A        2          13            33
3  Player A        2          13            33

补充说明

如果你的数据中同一Game_ID的Shot_Count可能存在不同值(而不是单纯重复),你可以把transform("first")换成你需要的聚合逻辑,比如取最大值transform("max")、最小值transform("min")或者平均值transform("mean"),再计算累计和即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:02:05