基于Game_ID实现仅单次统计的CumSum累计求和需求
解决基于Game_ID的唯一Shot_Count累计求和问题
我来帮你搞定这个需求!核心是每个Game_ID对应的Shot_Count只统计一次,不管它在原始数据里重复出现多少次,最终生成累计求和的CumSum_Shots列。下面用Python的Pandas库来实现,步骤清晰易懂:
思路拆解
- 先提取每个
Game_ID对应的唯一Shot_Count值(因为同一Game_ID的Shot_Count是重复的,取其中一个即可) - 对这些唯一的Shot_Count值按Game_ID的顺序计算累计和
- 把计算好的累计和映射回原始数据集的每一行
代码实现(附示例)
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
相关产品推荐
相关产品推荐

